#############################################################################
# elf.des: All maps and branch ending relating to the Elven Halls.
#
#  <<1>>   Arrival vaults
#  <<2>>   Decorative vaults
#  <<3>>   Monster-placing vaults
#  <<4>>   Elf:2 Hall of Blades entry vaults
#  <<5>>   Elf:2 Hall of Blades main vaults
#  <<6>>   End vaults
#
##############################################################################
##############################################################################

{{

crawl_require('dlua/vault.lua')

function elf_arrival_setup(e, glyph)
  e.tags("patrolling")
  e.tags("uniq_elf_entry")
  e.place("Elf:1")
  e.kmons(glyph .. " = deep elf zephyrmancer / " ..
                      "deep elf knight w:6 / deep elf archer w:6")
end

function elven_blade_entry(e)
  e.tags("elf_blade_entry no_monster_gen unrand")
  e.mons("patrolling dancing weapon ; dagger good_item | mundane falchion w:6")
  decorative_floor(e, "-", "weapon-inlaid floor")
end

function hall_of_blades_setup(e, w_floor)
  e.tags("no_monster_gen")
  e.tags("no_item_gen")
  e.place("Elf:2")
  decorative_floor(e, w_floor, "weapon-inlaid floor")
end

--[[
Set a monster list on six slots with a standard set of monsters for the Hall
of Blades Elf:2 vault:

1) deep elf pyromancer or zephyrmancer
2) deep elf knights or a small chance of (1)
3) deep elf blademaster (use sparingly!)
4) random dancing weapon
5), 6), 7) two or three high quality dancing weapons
           of mutually exclusive weapons and brands

The last three are defined by the hall_of_blades_weapon() function.
]]--
function hall_of_blades_monsters(e)
    e.mons("deep elf pyromancer / deep elf zephyrmancer")
    e.mons("deep elf knight w:22 / deep elf pyromancer w:1 \
           / deep elf zephyrmancer w:1")
    e.mons("deep elf blademaster")
    e.mons("dancing weapon")
    hall_of_blades_weapon(e)
end

-- Some thematic, limited extra rewards for opening the Hall of Blades.
function hall_of_blades_extra_rewards(e)
    e.kitem("d = scroll of enchant weapon pre_id q:1")
    e.kitem("e = scroll of brand weapon pre_id q:1")
    e.kitem("f = blade talisman / blade talisman randart w:2")
    e.kitem("g = manual of maces & flails /  manual of axes / \
                 manual of polearms / manual of staves / \
                 manual of long blades / manual of short blades")
end

-- Lua functions to simplify Elf:$
function elf_setup(e)
  e.tags("no_rotate")
end

function elf_loot_randomisation(e)
  e.kitem("$ = $")
  e.kitem("* = *")
  e.kitem("| = |")
  e.kitem("R = gold, shimmering gem")
  e.subst("| = | *:2")
  e.nsubst("$ = 1:R / *:$")
  e.subst("$ = $:20 *:4 |:1")
  e.subst("* = * |:3")
  e.nsubst("* = 2:$ / *:*")
end

-- The standard Elf:$ monster set
function elf_monsters(e)
  e.mons("deep elf high priest")
  e.mons("deep elf demonologist / deep elf elementalist w:3")
  e.mons("deep elf annihilator / deep elf elementalist w:3")
  e.mons("deep elf sorcerer / deep elf elementalist w:3")
  e.mons("deep elf death mage")
  e.mons("deep elf blademaster")
  e.mons("deep elf master archer")
end

-- The standard item defense squad
function elf_loot_defenders(e)
  e.kmons("$ = w:450 nothing / deep elf sorcerer / deep elf annihilator")
  e.kmons("* = w:300 nothing / deep elf annihilator / deep elf death mage")
  e.kmons("| = w:600 nothing / deep elf demonologist / deep elf death mage")
end
}}

##############################################################################
#
# <<1>> Elf:1 arrival vaults
#
##############################################################################
#
# The concept:
# There are no entry vaults for the Elven Halls. Instead, there is a "border
# check" vault on the other side, in the Elf:1 level. Note that elves and orcs
# are not necessarily at war or have big enmities against each other. It's
# just a border check.
#
# The intention:
# I (Eino here, hi!) lost a lot of characters trying to do the Halls right
# after the Mines until I realized the Halls are significantly harder. A
# welcoming party on the other side will hopefully warn the player about this.
#
# Honour this intention. For instance, put lots of space between the monsters
# and the stairs, so the players have many turns to realize their mistake.
# Note that designing can be a challenge with the eight space LOS. What might
# make the player realize it's better to flee: facing a nasty summon, taking
# a few hits from conjurations.. they might engage melee opponents, at which
# point it's quite difficult to flee. Please keep that in mind. Note also,
# that a corridor is usually easier for the player than an open space.
#
# This is an instance where an entry (arrival) vault really does benefit from
# having monsters, even a nasty bunch. However, don't go overboard trying to
# make it really hard. And try to make it seem like a plausible border guard.
#
##############################################################################

##############################################################################
# Dummy Elf arrival vault

NAME:   elf_arrival_dummy
TAGS:   dummy uniq_elf_arrival
PLACE:  Elf:1
WEIGHT: 50
ORIENT: float
MAP
{
ENDMAP

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

NAME:    elf_arrival_001
ORIENT:  west
SHUFFLE: asd / x$+, fgh / x$+
SUBST:   a = x, s = x, d = x, f = x, g = x, h = x
: elf_arrival_setup(_G, "1")
MAP
xxxxxxxxxxxxxxxaaa
xxxxxxxxxxxxxxxasa
xxxxxxxxxxxxxxxxdx
x...xxxxx..1.....@
x.{........G..G1.x
x...xxxxx..1.....@
xxxxxxxxxxxxxxxxhx
xxxxxxxxxxxxxxxfgf
xxxxxxxxxxxxxxxfff
ENDMAP

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

NAME:    elf_arrival_002
ORIENT:  south
: elf_arrival_setup(_G, "1")
MAP
xxxxx@xxx@xxx@xxxxx
xxxx...........xxxx
xx....G..1..G....xx
x...1.........1...x
x.G.............G.x
x.................x
x.......G.G.......x
x........[........x
x.....G.....G.....x
xx.1.....{.....1.xx
xxxx...........xxxx
xxxxxxxxxxxxxxxxxxx
ENDMAP

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

NAME:    eino_elf_arrival_customs
ORIENT:  southwest
SUBST:   2 = 1.
: elf_arrival_setup(_G, "1")
MAP
xxxxxxxxx
x.+.....x
x.x..x..x
x.m.xxx.x
x.x..x..x
x.m1..1.x
x.x.2x..x
x.m1xxx.x
x.x.1x..x
x{m...2.+
xxxxxxxxx
ENDMAP

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

NAME:    eino_elf_arrival_shootout
NSUBST:  1 = 1:1 / * = 1.
SUBST:   2 = 11.
: elf_arrival_setup(_G, "1")
MAP
xxxxxxxx@@@xxxxxxxx
xxxx...........xxxx
xx.......2.......xx
x.....1.....1.....x
xxxx.....G.....xxxx
xxxxxxxx...xxxxxxxx
xxx[.....{.....(xxx
xxxxxxxx...xxxxxxxx
xxxx.....G.....xxxx
x.....1.....1.....x
xx.......2.......xx
xxxx...........xxxx
xxxxxxxx@@@xxxxxxxx
ENDMAP

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

NAME:   eino_elf_arrival_sip
TAGS:   no_monster_gen
ORIENT: south
KFEAT:  Z = W
NSUBST: Z = 1:Z / * = ZZW
: elf_arrival_setup(_G, "Z")
MAP
 .........
x..WWWWW..x
xWWWZWZWWWx
xWWZWZWZWWx
xWWWWWWWWWx
x..WWWWW..x
x.........x
x....[....x
xx...{...xx
xxx.....xxx
xxxxxxxxxxx
ENDMAP

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

NAME:   eino_elf_arrival_the_gate
ORIENT: south
: elf_arrival_setup(_G, "1")
MAP
x.........x
@.........@
x....1....x
x...1.1...x
x.G..1..G.x
x.........x
xxx+++++xxx
xxx.....xxx
xxx..[..xxx
xxx.....xxx
xxx..{..xxx
xxxx...xxxx
xxxxxxxxxxx
ENDMAP

##############################################################################
# A nice scenic altar

NAME:    eino_elf_arrival_altar
ORIENT:  west
KFEAT:   C = altar_vehumet
: elf_arrival_setup(_G, "1")
MAP
xxxxxxxxxxxxxxxxxxxxxxx@@@xxxx
xxxxxxxxxxxxx...xxxxxx.....xxx
xxxxxxxxxxx.11x...xx.........x
xxxxxxxxx...xxxxx.x..........x
x...xxxxx.xxxxxxx.m..........x
x.[.......xxxxxx....1..GmG...@
x....xxxxxxxxxxx..m..C1mbm...@
x.{.......xxxxxx....1..GmG...@
x...xxxxx.xxxxxxx.m..........x
xxxxxxxxx...xxxxx.x..........x
xxxxxxxxxxx.11x...xx.........x
xxxxxxxxxxxxx...xxxxxx.....xxx
xxxxxxxxxxxxxxxxxxxxxxx@@@xxxx
ENDMAP

NAME:   minmay_elf_arrival_circle
SUBST:  B : b.
: elf_arrival_setup(_G, "1")
MAP
       xx+xx
    xxxx...xxxx
   xx....1....xx
  xx...........xx
 xx.............xx
 x...BbB...BbB...x
 x...bbb...bbb...x
xx...BbB...BbB...xx
x.................x
+.1......{......1.+
x.................x
xx...BbB...BbB...xx
 x...bbb...bbb...x
 x...BbB...BbB...x
 xx.............xx
  xx...........xx
   xx....1....xx
    xxxx...xxxx
       xx+xx
ENDMAP

NAME:   minmay_elf_arrival_plus
SUBST:  1 = 1 .:7
: elf_arrival_setup(_G, "1")
MAP
     x@...@x
     x.....x
     x.1T1.x
     x.....x
    xx.....xx
xxxxxmmm+mmmxxxxx
@....m.....m....@
..1..m.....m..1..
..T..+.({[.+..T..
..1..m.....m..1..
@....m.....m....@
xxxxxmmm+mmmxxxxx
    xx.....xx
     x.....x
     x.1T1.x
     x.....x
     x@...@x
ENDMAP

NAME:   minmay_elf_arrival_summoners
KMONS:  0 = deep elf pyromancer
KFEAT:  m = iron_grate
: elf_arrival_setup(_G, "1")
MAP
  xxxxxxx
  x.....x
  x.({[.x
xxx.....xxx
+0m.....m0+
xxx.....xxx
+0m.....m0+
xxx.....xxx
+0m.....m0+
xxx.....xxx
  x.....x
  x@.1.@x
ENDMAP

NAME:    nicolae_elf_arrival_aired_out
TAGS:    transparent
MONS:    deep elf zephyrmancer / air elemental w:6
SHUFFLE: DEFH / JKLM
SUBST:   1 = 1., DM = m, E = {, F = T, H = +, JKL = .
: elf_arrival_setup(_G, "X")
MAP
          ..
xxxxxxxxxxHHx
x.ED..J.1D1.x
x..D..J.1D1.x
x.KJ..D.1J1.M.
x.LJ..D.1J1.M.
x..D..J.1D1.x
x.FD..J.1D1.x
xxxxxxxxxxHHx
          ..
ENDMAP

NAME:   nicolae_elf_arrival_dilemma
TAGS:   no_item_gen no_monster_gen transparent
WEIGHT: 5
: elf_arrival_setup(_G, "1")
MONS:   deep elf annihilator / deep elf sorcerer
SUBST:  T : TG
MAP
xxxxxxxxxxxxxxxxx
x..*..xxTxx.....x
x..2..=...=..1..x
=.....=.{.=.1%1.=
x..2..=...=..1..x
x..|..xxTxx.....x
xxxxxxxxxxxxxxxxx
ENDMAP

NAME:   nicolae_elf_arrival_fired_up
TAGS:   transparent
KMONS:  1 = deep elf pyromancer
KMONS:  2 = thermic dynamo
KFEAT:  1 = T
: elf_arrival_setup(_G, "X")
MAP
        .@.
bbbbbbbbnnnbb
b...........b
b..T..b..1..b
b.....n.....n.
b..{..n..2..+@
b.....n.....n.
b..T..b..1..b
b...........b
bbbbbbbbnnnbb
        .@.
ENDMAP

# A small group of powerful orcs has arrived at the border check ahead of you.
NAME:   nicolae_elf_arrival_no_cutting_in_line
MONS:   orc high priest / orc sorcerer
NSUBST: 1 = 2:1 / * = 1..., 2 = 2:2 / * = 2...
: elf_arrival_setup(_G, "2")
MAP
x@@@xxxxxxxxxxx
x.............x
x.T.........T.x
x.............x
xxxxxmmmmmx...x
x...x11.22x...x
x....11.22....x
x....11.22....x
x...x11.22x...x
x...xmmmmmxxxxx
x.............x
x.T.........{.x
x.............x
xxxxxxxxxxxxxxx
ENDMAP

NAME:   tekkud_elf_arrival_free_trade_zone
TAGS:   no_monster_gen
KMONS:  s = thermic dynamo / dancing weapon
KFEAT:  s = abandoned_shop
KFEAT:  + = closed_clear_door
SUBST:  _ = 1.
: elf_arrival_setup(_G, "1")
MAP
 ccccccccccccccc
cccT.........Tccc
cccc.........cccc
cTccc...{...cccTc
c..ccc.....ccc..c
c...ccc...ccc...c
c._..cm...mc.._.c
c.....+m.m+.....c
c..s...+m+...s..c
c.....ccccc.....c
c.1..ccc ccc..1.c
c...ccc   ccc...c
c..ccc     ccc..c
c.ccc       ccc.c
c@cc         cc@c
ENDMAP

##############################################################################
#
# <<2>> Decorative vaults.
#
##############################################################################

NAME:    nicolae_elf_glass_and_crystal_pillar_1
DEPTH:   Elf
TAGS:    transparent extra allow_dup
SHUFFLE: ab, bc
SUBST:   a = m, b : mb, c = b, _ : .._
CLEAR:   _
MAP
________
_......_
_.abba._
_.bccb._
_.bccb._
_.abba._
_......_
________
ENDMAP

NAME:    nicolae_elf_glass_and_crystal_pillar_2
DEPTH:   Elf
TAGS:    transparent extra allow_dup
SHUFFLE: ab, bc
SUBST:   a = m, b : mb, c = b, _ : .._
CLEAR:   _
MAP
_______
_....._
_.aba._
_.bcb._
_.aba._
_....._
_______
ENDMAP

NAME:    nicolae_elf_stair_hall
DEPTH:   Elf:2-
TAGS:    extra
SUBST:   v : vb
SHUFFLE: {[(
MAP
    xxxxxxxxxxxxxxx
  xxxcccccccccccccx
 xxccc...........cx
 xcc....vv..vv..ccx
xxc....vv..vv..cccx
xcc...vv..vv..ccccx
xc...vv..vv.......@
xc.{..............@
xc...vv..vv.......@
xcc...vv..vv..ccccx
xxc....vv..vv..cccx
 xcc....vv..vv..ccx
 xxccc...........cx
  xxxcccccccccccccx
    xxxxxxxxxxxxxxx
ENDMAP

NAME:    nicolae_elf_stone_circles
DEPTH:   Elf
TAGS:    transparent extra allow_dup luniq
SHUFFLE: za, bd
SUBST:   a = A, b = B, zd = c
SHUFFLE: AB, DEFG
SUBST:   AD : +, BEFG = c, Z : GT. U:3, c : cx
MAP
      ccFcc
    Ecc...ccG
   cc.......cc
  Dc.....cczacc
 cc.....cc...ccc
 cdbc..cc.....cc
ccc.cccc.......cc
cc...cc.........c
A..Z..+....Z....B
cc...cc.........c
ccc.cccc.......cc
 cdbc..cc.....cc
 cc.....cc...ccc
  Dc.....cczacc
   cc.......cc
    Ecc...ccG
      ccFcc
ENDMAP

NAME:   nicolae_elf_v_pinch
DEPTH:  Elf
TAGS:   transparent extra allow_dup luniq_pinch
SUBST:  b : bc
NSUBST: L = @ / ., R = @ / .
MAP
xxxxxxxxx
bbxxxxxbb
LbbxxxbbR
L.bbxbb.R
L..bbb..R
L...b...R
L.......R
L.......R
L.......R
L...b...R
L..bbb..R
L.bbxbb.R
LbbxxxbbR
bbxxxxxbb
xxxxxxxxx
ENDMAP

NAME:   nicolae_elf_w_pinch
DEPTH:  Elf
TAGS:   transparent extra allow_dup luniq_pinch
SUBST:  b : bc
NSUBST: L = @ / ., R = @ / .
MAP
xxxxxxxxxxxxxxxxx
bbxxxxxbbbxxxxxbb
Lbbxxxbb.bbxxxbbR
L.bbxbb...bbxbb.R
L..bbb.....bbb..R
L...b.......b...R
L...............R
L...............R
L...............R
L...b.......b...R
L..bbb.....bbb..R
L.bbxbb...bbxbb.R
Lbbxxxbb.bbxxxbbR
bbxxxxxbbbxxxxxbb
xxxxxxxxxxxxxxxxx
ENDMAP

NAME:   nicolae_elf_m_pinch
TAGS:   transparent extra allow_dup luniq_pinch
DEPTH:  Elf
SUBST:  b : bc
NSUBST: L = @ / ., R = @ / .
MAP
xxxxxxxxxxxxxxxxx
xxxbbbxxxxxbbbxxx
xxbb.bbxxxbb.bbxx
xbb...bbxbb...bbx
bb.....bbb.....bb
b.......b.......b
L...............R
L...............R
L...............R
b.......b.......b
bb.....bbb.....bb
xbb...bbxbb...bbx
xxbb.bbxxxbb.bbxx
xxxbbbxxxxxbbbxxx
xxxxxxxxxxxxxxxxx
ENDMAP

NAME:    nicolae_elf_big_sculpture_1
TAGS:    transparent extra allow_dup
DEPTH:   Elf
SHUFFLE: abcdf
SUBST:   a : .
SHUFFLE: bcdef
SUBST:   bcd : v, e : .v, f : .v, v : vbcx
MAP
.........
.fda.adf.
.deb.bed.
.abc.cba.
.........
.abc.cba.
.deb.bed.
.fda.adf.
.........
ENDMAP

NAME:    nicolae_elf_big_sculpture_2
TAGS:    transparent extra allow_dup luniq
DEPTH:   Elf
SHUFFLE: mlk/mkl/nnn, abcdefghij
SUBST:   ka = ., nbcd = v, e : .v, f : .v, g : .v, h : .v, i : .v, j : .v
SUBST:   l : .v, m : GGGv., v : vbcx
: if crawl.coinflip() then
:   vault_metal_statue_setup(_G, "G", "dimensional conduit")
: else
:   vault_metal_statue_setup(_G, "G", "storm conduit")
: end
MAP
  ...........
  .abcd.dcba.
....efg.gfe....
.a...hi.ih...a.
.be...j.j...eb.
.cfh.......hfc.
.dgij.klk.jigd.
......lml......
.dgij.klk.jigd.
.cfh.......hfc.
.be...j.j...eb.
.a...hi.ih...a.
....efg.gfe....
  .abcd.dcba.
  ...........
ENDMAP

NAME:    nicolae_elf_big_sculpture_3
TAGS:    transparent extra allow_dup luniq
DEPTH:   Elf
: if crawl.coinflip() then
SHUFFLE: bcegh
SUBST:   b = .
SHUFFLE: acdefghi
: else
SUBST:   f = v
SHUFFLE: abcdeghi
: end
SUBST:   acd = v, b : .v, e : .v, f : .v, g : .v, h : .v, i : .v
SUBST:   j : GGGv., v : vbcx
: if crawl.coinflip() then
:   vault_metal_statue_setup(_G, "G", "dimensional conduit")
: else
:   vault_metal_statue_setup(_G, "G", "arcane conduit")
: end
MAP
        .
       ...
      ..a..
     ..bcb..
    ..defed..
   ....ghg....
  ..d...i...d..
 ..beg.....geb..
..acfhi.j.ihfca..
 ..beg.....geb..
  ..d...i...d..
   ....ghg....
    ..defed..
     ..bcb..
      ..a..
       ...
        .
ENDMAP

NAME:    hangedman_elven_ridges
TAGS:    extra transparent
DEPTH:   Elf
MONS:    fungus
SHUFFLE: ABCD, EF, GHIJKLMN
SUBST:   A : x.., B : xx., CD = x, E : x.., F : x..
SUBST:   G : xxx., H : xxx., I : x., J : x., K : x:1 .:9, L : x:1 .:9
SUBST:   MN = ., c : c:16 b:2 v:1 1:1
MAP
   .cxBxc.
   .H...G.
   ...x......
......x......
cH..F.x.xxCxx
x.......J...I
A.xxx.c...x......
x.........x......
cG..xJ..E.x.xxDxx
....x.......L...K
  ..D.xxx.c...x..
  ..x.........x......
  ..xI..xL..F.x.xxAxc
      ..x.......N...M
      ..C.xxx.c...x..
      ..x.........x.
      ..xK..xN..E.x.
          ..x.......
          ..B.xxx.c.
          ..x.......
          ..cM.
ENDMAP

NAME:    hangedman_elven_pyramids
TAGS:    extra transparent
DEPTH:   Elf
SHUFFLE: ABCD, +-_, yz / yz / zy
SUBST:   A : ZZ., B : Z., C : Z.., D = .
SUBST:   + : x:9 +:2 .:1, -_ : x:9 z:1
SUBST:   Z : z:5 c:1 x:1 b:1, z : c:6 x:3 .:1
MAP
       ..x..
      ..x.x..
     ..x...x..
    ..x..A..x..
   ..x...y...x..
  ..x..xz.zx..x..
 ..x.x...y...x.x..
..x...zy.C.yz...x..
.x..B.yz...zy.D..x..
x.......x.x.......x..
xxxx+xxxx-x_xx-xxxx+xxxx
   ..x.......x.x.......x
    ..x..D.yz...zy.B..x.
     ..x...zy.C.yz...x..
      ..x.x...y...x.x..
       ..x..xz.zx..x..
        ..x...y...x..
         ..x..A..x..
          ..x...x..
           ..x.x..
            ..x..
ENDMAP

NAME:    hangedman_elf_targeted_burst
TAGS:    transparent extra
DEPTH:   Elf
SUBST:   x : xxc, Y : yycvb, y : xxcbv, z : cbv, Z = cbvGG
: if crawl.coinflip() then
:   vault_metal_statue_setup(_G, "G", "arcane conduit")
: else
:   vault_metal_statue_setup(_G, "G", "fiery conduit")
: end
MAP
        x
   .x...y...x
   ..Y.xxx.Y.
   ...x...x..
   ..x.....x.
  xxyx..Z..xyx
 ....x.....x.
 .....z...x..
 ...xz.xxx.Y.
 ...zx..y...x
..xz....x....
..zx....x
xz......
zx..
ENDMAP

NAME:    hangedman_elf_simple_split
TAGS:    extra transparent
DEPTH:   Elf
MONS:    fungus
SHUFFLE: de, fg, hijk, CD
SUBST:   d : +., e : +x., f : +x., e : +.
SUBST:   h : +x, i : +x., i : +x., j : +x.
SUBST:   C : CTG1wl., D : ., x : x:90 cvb
KMASK:   wl = no_monster_gen
MAP
x..xx
x...xxxxxx
x...d....xxxxxx
xxx.e....h.....
xxxxx.CD.i....x
....f....j....x
....g....k.....
xxxxxxxxxx....x
....g....k.....
....f....j....x
xxxxx.CD.i....x
xxx.e....h.....
x...d....xxxxxx
x...xxxxxx
x..xx
ENDMAP

NAME:    nicolae_elf_glassroom_feature
TAGS:    transparent
DEPTH:   Elf
KFEAT:   O = any shop
SHUFFLE: x_/m-
SUBST:   S = GTOSSS
: if you.depth() == 1 then
SUBST:   S = )}]
: elseif you.depth() ~= dgn.br_depth(you.branch()) then
SUBST:   S = (){}[]
: else
SUBST:   S = ({[
: end
CLEAR:   _
: if crawl.coinflip() then
:   vault_metal_statue_setup(_G, "G", "dimensional conduit")
: else
:   vault_metal_statue_setup(_G, "G", "fiery conduit")
: end
MAP
---__.__---
-mmxx.xxmm-
-m.......m-
_x..mxm..x_
_x.m...m.x_
...x.S.x...
_x.m...m.x_
_x..mxm..x_
-m.......m-
-mmxx.xxmm-
---__.__---
ENDMAP

NAME:    nicolae_elf_variegated_diamond
TAGS:    transparent
DEPTH:   Elf
KFEAT:   q = closed_clear_door
SHUFFLE: +cb/+cv/+cn/+cx/+bc/+bv/+bx/+bn/+vc/+vb/+vx/+vn/+xc/+xb/+xv/+xn/\
         qnc/qnb/qnv/qnx
MAP
.......b.......
.cb...bcb...cb.
.bc..bcbcb..bc.
....bcb.bcb....
...b+b...b+b...
..bcb.....bcb..
.bcb...c...bcb.
bcb...cbc...bcb
.bcb...c...bcb.
..bcb.....bcb..
...b+b...b+b...
....bcb.bcb....
.cb..bcbcb..cb.
.bc...bcb...bc.
.......b.......
ENDMAP

##############################################################################
#
# <<3>> Monster-placing vaults.
#
##############################################################################

NAME:    elven_spread
TAGS:    no_dump extra allow_dup nolayout_encompass luniq
PLACE:   Elf:1
{{
  local c = 1
  hook("post_place", function()
    dgn.place_maps{tag="misc_elf_vault", count=c}
  end)
}}

# Total weight of minmay's crystal vaults is 30.
NAME:   minmay_elf_crystal_square
DEPTH:  Elf
ORIENT: float
MONS:   deep elf pyromancer / deep elf zephyrmancer / nothing w:20
MAP
+bbbbbbbbbbbbbbb+
b...............b
b.bbbb..bbbbbb..b
b.b1....b..11b..b
b.bb....b..bbb..b
b.b1............b
b.b...bbbbb..b..b
b....bb......b..b
b...bb....1..b..b
b..bb...b....b..b
b..b.1..bb..1b..b
b..b.....bb..b..b
b..b1U.1..b..b..b
b..b.......1.b..b
b..bbbbbbbbbbb..b
b...............b
+bbbbbbbbbbbbbbb+
ENDMAP

NAME:   minmay_elf_crystal_pentagon
DEPTH:  Elf
ORIENT: float
WEIGHT: 8
MONS:   deep elf pyromancer / deep elf zephyrmancer / nothing w:25
MAP
   +bbbbbbbbbbb+
   b...........b
   b...........b
  bb...bbbbb...bb
  b1..bb1.1bb..1b
  b...b1.U.1b...b
 bb...bb1.1bb...bb
 b.....bb.bb.....b
 b...............b
bb..bb..1........bb
+...b1....bbb.....+
bb..bbbb...1b...1bb
 bb1..1bb..bb...bb
  bbb...b..b1.bbb
    bb.......bb
     bb.....bb
      bbb.bbb
        b+b
ENDMAP

NAME:   minmay_elf_crystal_hexagon
TAGS:   misc_elf_vault
DEPTH:  Elf
ORIENT: float
WEIGHT: 6
MONS:   deep elf zephyrmancer / deep elf pyromancer / \
        thermic dynamo w:2
NSUBST: 1 = 2:1 / 3:. / * = 1..
MAP
    +bbbbbbbbb+
    b...1b1...b
   bb...1b1...bb
   b....bbbb...b
  bb...bb.1....bb
  b....b.1......b
 bb....b...bb...bb
bb.....b.1..bb...bb
+.......1.1..bb...+
bb...bb1.U.1bb...bb
 bb...bb1.1bb1..bb
  b...1bb1bb....b
  bb...1bbb....bb
   b..1.1b1....b
   bb.bbbb....bb
    b.........b
    +bbbbbbbbb+
ENDMAP

NAME:   minmay_elf_crystal_heptagon
TAGS:   misc_elf_vault
DEPTH:  Elf
ORIENT: float
WEIGHT: 4
MONS:   deep elf pyromancer w:15 / deep elf zephyrmancer w:15 / \
        deep elf death mage / thermic dynamo w:5 / nothing w:70
NSUBST: 1 = 2:1 / 4:. / * = 1:4 .:7
MAP
    +bbbbbbb+
   bb.......bb
   b.........b
  bb..bbbbb..bb
 bb...b.1.b...bb
bb...bb1.1bb...bb
+....b1.U.1b.1..+
b.b1.b1.1.1b1bb.b
b.bb1bb1.1bb.1b.b
b1....bb.bb1....b
bb..1.....11b..bb
 b.bb1....bbb..b
 b..b.1b11.....b
 +b1...bbb....b+
  bbb.......bbb
    bbb...bbb
      bb+bb
ENDMAP

NAME:   minmay_elf_crystal_octagon
DEPTH:  Elf
ORIENT: float
WEIGHT: 2
MONS:   deep elf pyromancer w:15 / deep elf zephyrmancer w:15 / \
        deep elf death mage / deep elf sorcerer / nothing w:100
MAP
     +bbbbb+
    bb.....bb
   bb..bb...bb
  bb...1.1...bb
 bb...bbbbb...bb
+b....b111b...1b+
b...bb.1b1.bb...b
b..1b11...11b1b.b
b...b1b.U.b1b.b.b
b.b1b11...11b1b.b
b...bb.1b1.bb...b
+b....b111b....b+
 bb...bbbbb...bb
  bb1..1.1...bb
   bb..b.b..bb
    bb.....bb
     +bbbbb+
ENDMAP

NAME:  minmay_elf_necromancy
TAGS:  misc_elf_vault
DEPTH: Elf
MONS:  elf zombie w:4 / large abomination w:4 / necromancer w:3 / nothing
KMONS: 2 = deep elf death mage
KITEM: 2 = randbook disc:necromancy slevels:16
FTILE: .12+ = floor_necro_squares
MAP
xxxxxxxxxxx
xxx1..x112x
xxx..1+111x
x.1.1.xxxxx
+......1..x
x..1.1....+
x.Y.....xxx
x11...1xxxx
xxxxxxxxxxx
ENDMAP

NAME:   minmay_elf_sorcery
TAGS:   misc_elf_vault transparent
DEPTH:  Elf
MONS:   deep elf pyromancer w:15 / deep elf zephyrmancer w:15 / nothing
KMONS:  2 = deep elf sorcerer w:90 / deep elf annihilator / deep elf demonologist
KITEM:  2 = randbook disc:conjuration disc2:summoning slevels:16
KFEAT:  z = x
SUBST:  x : xxc, G : Gm, m : mmcxb
TILE:   z = wall_baleful
: vault_metal_statue_setup(_G, "G", "arcane conduit")
MAP
...........1............
.Gmm.x..x......x..x.mmG.
.mmm...........1....mmm.
.mmm1.x..x....x..x.1mmm.
1mmmm.....1......1.mmmm.
.mmmm1.x..x..x..x..mmmm.
..mmmm..1.........mmmm..
 ..mmmm......1...mmmm.1
  ..mmmmm......mmmmm..
   ...mmxxz++zxxmm...
     1..xx%..%xx...
      ..x......x..
       .x......x1
       .x......x.
       .x......x.
       .xx2..%xx.
       .xxxxxxxx.
       ...1......
ENDMAP

NAME:   minmay_elf_annihilation
TAGS:   misc_elf_vault transparent
DEPTH:  Elf
MONS:   deep elf pyromancer / deep elf zephyrmancer w:8 / thermic dynamo w:4
KMONS:  2 = deep elf annihilator / deep elf sorcerer w:2
KITEM:  2 = randbook disc:conjuration slevels:16
NSUBST: 1 = 1:1 / 2:. / * = 1.
SUBST:  x : x c:1
MAP
        ...
        .x1
  ...............
  .x.xxxx+xxxx.x.
  ...x....1..x...
  .xxx1x...x.xxx.
  .x....1......x.
  .x.x..b+b..x.x.
...x1..bb%bb1..x...
.x.+...+.2.+...+.x.
...x...bb%bb..1x...
  .x.x1.b+b..x.x.
  .x.......1...x.
  .xxx.x...x.xxx.
  .1.x..1....x..1
  .x.xxxx+xxxx.x.
  ...............
        .x.
        ...
ENDMAP

NAME:    minmay_elf_demonology
TAGS:    misc_elf_vault transparent
DEPTH:   Elf
KMONS:   123 = deep elf pyromancer / deep elf zephyrmancer
KMONS:   45 = deep elf demonologist w:90 / deep elf sorcerer / \
              deep elf high priest
KITEM:   45 = randbook disc:summoning slevels:16
KFEAT:   z = x
SUBST:   1 = 1., 2 = 2'
SHUFFLE: 24'y / 35"z
SUBST:   y = x, " = .
FTILE:   '23% : floor_mystic_chasm
TILE:    z = wall_baleful
MAP
        ..
       ....
      ......
     ..1xx...
    ..'xxxx'..
   ..''xyyx2'1.
  ..'2''xx''''..
 ..xx'''''2''xx1.
..xxyx''xx''xyxx..
..xxyx2x'4x'xyxx..
 ..xx''x%'x''xx..
  .'2'''xx''''2.
   .'xx''''xx2.
   .xyyx''xyyx.
   .xxxx1.xxxx.
   ..xx...1xx..
    ..1.......
     ........
      ......
       ....
        ..
ENDMAP

# Dummies give 2 XP and halt autotravel for adjacent players, used for flavour
NAME:   minmay_elf_archery
DEPTH:  Elf:2-
ORIENT: float
MONS:   deep elf archer / nothing, deep elf master archer
MONS:   training dummy tile:mons_training_dummy
MAP
x+xxxxxxxxxxxxxx
x...1.........%x
x.1....1......3x
.....1.........x
@2............3x
...1...........x
x1....1.......3x
x...1.........%x
x+xxxxxxxxxxxxxx
ENDMAP

NAME:    minmay_elf_blademastery
DEPTH:   Elf:$
ORIENT:  float
MONS:    deep elf knight / nothing
MONS:    deep elf blademaster
MONS:    training dummy tile:mons_training_dummy
KITEM:   d = long sword, long sword / nothing, \
             long sword / nothing, long sword / nothing
KITEM:   e = falchion, falchion / nothing, \
             falchion / nothing, falchion / nothing
KITEM:   f = scimitar, scimitar / nothing, \
             scimitar / nothing, scimitar / nothing
KITEM:   g = rapier, rapier / nothing, \
             rapier / nothing, rapier / nothing
SHUFFLE: defg
MAP
xxxxxxxxxx+xxx
x.1..........+
x3..31.31....x
x............x
x..........2.x
x3.13..3.....x
x1.....1...x+x
x..........xdx
x31.31.3...xex
x.......1..xfx
xxxxxxxxxx+xxx
ENDMAP

# Some orcs on a diplomatic mission (Shiori)
# They have brought some gold from their mines as a gift
NAME:    orc_legates
DEPTH:   Elf, !Elf:$
SHUFFLE: AB , 34 , 12
SUBST:   6 = 4
SUBST:   0 = 0 .:9 9:1
SUBST:   5 = 5 .:9 4:1
KITEM:   A = any good_item
KITEM:   B = any good_item
KMONS:   A = patrolling deep elf knight / patrolling deep elf archer
KMONS:   B = patrolling deep elf high priest / patrolling deep elf demonologist
MONS:    ice dragon / fire dragon, storm dragon / shadow dragon / iron dragon
MONS:    orc knight / orc sorcerer / orc high priest
MONS:    orc warrior / orc wizard / orc priest
MONS:    orc
ITEM:    q:120 gold / q:60 gold / q:30 gold
# being able to blink and become invisible, the deep elves do not need a
# hidden exit in back of their audience chamber.
MAP
cccccxxccccc
c1.2cGGc1.2c
c===cABc===c
xG00B..A00Gx
xG00A..B00Gx
xx00x..x00xx
xG00.dd.00Gx
xG...34...Gx
xx.5x66x5.xx
xG.555555.Gx
xG.555555.Gx
xx++x++x++xx
ENDMAP

# A high-level negotiation between orc and deep elf leaders (Shiori)
NAME:     elf_orc_summit_meeting
TAGS:     misc_elf_vault
DEPTH:    Elf:$
SHUFFLE: 12 , 45
NSUBST:  7= 1=7 / *= 7:1 .
NSUBST:  6= 1=6 D:1 / *= 6 .:1
SUBST:   3 = 3 .:1
# the deep elf delegation:
MONS:    deep elf blademaster / deep elf master archer
MONS:    deep elf annihilator / deep elf sorcerer / deep elf death mage
MONS:    deep elf knight w:5 / deep elf archer w:5 / \
         w:1 deep elf high priest / w:1 deep elf demonologist
# the orcish delegation:
MONS:    orc warlord / iron troll / w:1 fire giant / w:1 frost giant / \
         w:1 stone giant / w:1 ettin
MONS:    orc sorcerer / orc high priest / w:5 ogre mage
MONS:    orc knight / deep troll / w:1 orc sorcerer / w:1 orc high priest
# the arbiter(s):
MONS:    great orb of eyes / guardian sphinx
# The orcs might have a unique with them. He or she will likely be outclassed
# by the others in attendance, but perhaps has some special testimony to
# present. None of the uniques really fits in with the deep elves...
KMONS:   D = Ijyb / Blorkula the orcula / Urug / Erolcha / Snorg
MAP
     xxxx
    xxGGxx
 xxxx3776xxxx
.GxT33..66TxG.
.xxx3x..x6xxx.
@+3+331466+6+@
@+3+332566+6+@
.xxx3x..x.xxx.
.GxT33..66TxG.
 xxxx3776xxxx
    xxGGxx
     xxxx
ENDMAP

NAME:  guppyfry_elf_castle
TAGS:  transparent
DEPTH: Elf:2-
MONS:  deep elf pyromancer w:5 / deep elf zephyrmancer w:5 / \
       deep elf knight / deep elf archer
MONS:  deep elf blademaster / deep elf death mage / deep elf sorcerer
MONS:  plant
SUBST: - = .%*3$
SUBST: ? = .12$
MAP
..............
.xxmxx..xxmxx.
.x1-1x..x1*1x.
.x.?.x..x.2.x.
.xx.xx..xx.xx.
.x...x..x...x.
.x...x..x...x.
.xxx+x++x+xxx.
.x.2......?.x.
.x.*1....1-.x.
.xxmxx++xxmxx.
..............
ENDMAP

NAME:  guppyfry_elf_garden
TAGS:  transparent
DEPTH: Elf:2-
MONS:  deep elf pyromancer / deep elf zephyrmancer
MONS:  deep elf blademaster / deep elf master archer / deep elf sorcerer
MONS:  plant
SUBST: - = WW333..%
SUBST: ' = wwWW333ttt..%
MAP
................
................
..mmmmT..Tmmmm..
..m'---..---'m..
..m-'--..--'-m..
..m--'-..-'--m..
..3---t..t---3..
.......21.......
.......11.......
..3---t..t---3..
..m--'-..-'--m..
..m-'--..--'-m..
..m'---..---'m..
..mmmmT..Tmmmm..
................
................
ENDMAP

NAME:  guppyfry_elf_altar
TAGS:  misc_elf_vault
MONS:  deep elf knight / deep elf archer / \
       deep elf pyromancer / deep elf zephyrmancer
MONS:  deep elf high priest
SUBST: F = G:6 F:1
KMONS: F = orange crystal statue / obsidian statue / ice statue
SUBST: ? = .1$%*
MAP
xxxxxxxxxxx
xC?1.m....+
x??1Fm....+
x112.m....x
x.F..F..xxx
x.........x
x..F..F...x
x.........x
x...F..F..x
x.........x
x...T..T..x
xxxxx++xxxx
ENDMAP

NAME:  guppyfry_elf_lava
TAGS:  transparent
DEPTH: Elf:2-
MONS:  deep elf pyromancer / deep elf zephyrmancer / thermic dynamo w:2
MONS:  deep elf death mage / deep elf demonologist
KFEAT: C = general shop type:Elven suffix:Fire count:7 ; \
           scroll of immolation w:5 | \
           ring of protection from fire w:10 | \
           any weapon ego:flaming w:4 | hand cannon ego:flaming w:4 | \
           wand of flame w:4 | any armour ego:fire_resistance w:9 | \
           staff of fire w:7 | randbook disc:fire w:20
KFEAT: z = x
SUBST: ? = .l1
SUBST: - = .l
TILE:  z = wall_baleful
MAP
.............
.xxxx-..-xxxx.
.xllll-.llllx.
.xllll.-llllx.
.xllll-.llllz.
.-lll?..Clll-.
...-..12...-..
..-.-.11..-.-.
.-lll?..?lll-.
.zllll.-llllx.
.xllll-.llllx.
.xllll.-llllx.
.xxxx...-xxxx.
..............
ENDMAP

NAME:    hangedman_elf_power_crystal
TAGS:    extra transparent
DEPTH:   Elf
KMONS:   1 = crystal guardian
KMONS:   2 = thermic dynamo
SHUFFLE: @ABC, QRST, n12' / n12' / xxxx
SUBST:   A : b:8 .:1 @:1, BC = b, x : b:8 x:1
SUBST:   Q : b:8 .:1, R : b.., S : b:1 .:8, T = .
KMASK:   12' = no_trap_gen
KMASK:   12' = no_item_gen
KMASK:   12' = no_monster_gen
KMASK:   12' = opaque
KPROP:   12' = no_tele_into
TILE:    12' = floor_pebble_green
COLOUR:  12' = green
MAP
          bbbbbbbbAb
         Bb.b..T..bA
        Bb...b...b.b
       bb..R..b.b..b
    b@bbbbb.bbbb..Sb
    @b.....bb''bb..b
    b.b...bb'1'b.b.b
   bb..b.bb'''nb..bb
  Cbb...bb'2'bb.Q..b
 Cb.b..bb'''nb.b..bb
bb..b.bn'''bb..b.bC
b..Q.bb'2'bb...bbC
bb..bn'''bb.b..bb
b.b.b'1'bb...b.b
b..bb''bb.....b@
bS..bbbb.bbbbb@b
b..b.b..R..bb
b.b...b...bB
Ab..T..b.bB
bAbbbbbbbb
ENDMAP

NAME:    hangedman_elven_crosses_minicolossus
TAGS:    no_monster_gen transparent misc_elf_vault
DEPTH:   Elf
MONS:    deep elf pyromancer / deep elf zephyrmancer / thermic dynamo w:2
MONS:    deep elf knight / deep elf pyromancer w:3 / deep elf zephyrmancer w:3
MONS:    deep elf pyromancer / deep elf zephyrmancer
MONS:    dancing weapon ; short sword ego:flaming | short sword ego:freezing | \
                          short sword ego:venom | short sword ego:electrocution
# Some basic excessive pillar randomization work,
# with spokes per-cross and centers in mirrored / half pairs.
SUBST:   A : xxcb..., B : xxcb..., C : xxcb..., D : xxcb...
SHUFFLE: EFGHIJKL / EFIJGHKL, EFGH / FEHG
SHUFFLE: IJKL / JILK, MNOP / MONP, +Q
SUBST:   EG : xxcb, IK : xxcb, FHJL = .
SUBST:   MN : x., OP : x., Q = x
MAP
    .@.xxxxxx
    @x.+...xx
    ..3x.A.xxxxx
   xxQxx...xxxxxxxx
   xx...EFE..*xxxxx.@.
   xx.A.FMF.A2x...Q.x@
  xxx...EFE..*x.B.x3..
  xxxxxx.4.xxxx...xx+x
  xx*2*x.A.Q...IJI...x
xxxx.D.x..1+.B4JNJ.B.x
xxxx...xQ+cc1..IJI...x
x...KLK..1cc+Qx...xxxx
x.D.LPL4D.+1..x.B.xxxx
x...KLK...Q.C.x*2*xx
x+xx...xxxx.4.xxxxxx
..3x.D.x*..GHG...xxx
@x.Q...x2C.HOH.C.xx
.@.xxxxx*..GHG...xx
   xxxxxxxx...xxQxx
      xxxxx.C.x3..
         xx...+.x@
         xxxxxx.@.
ENDMAP

NAME:    hangedman_elf_represent
TAGS:    no_monster_gen misc_elf_vault
DEPTH:   Elf
WEIGHT:  3
# Place two pairings of lower and higher tier elves.
MONS:    deep elf pyromancer, deep elf elementalist
MONS:    deep elf zephyrmancer, deep elf annihilator
MONS:    deep elf knight, deep elf blademaster, deep elf archer
KMONS:   8 = deep elf master archer
ITEM:    staff of fire pre_id / staff of air pre_id / \
         ring of wizardry pre_id / ring of slaying pre_id / \
         ring of dexterity pre_id / longbow good_item
NSUBST:  1 = 2 = 111.. / 1:. / 2:1, 3 = 2 = 333.. / 1:. / 2:3
SHUFFLE: 12 / 34, 56 / 78
SUBST:   ' : x., " : x.
MAP
xxxxxxxxxx''........
xxx..xxxx"x.x.x.x.x@
xx1..2xx1...x.x.x.x@
x..xx..====.x.......
x..xx..=$"===5xxxxxx
xx1..1x=$%d$=xx..xxx
xxx..xx=$d%$=x5...xx
xxxxxx1==="$=..xx..x
.......x.====..xx..x
@x.x.x.x...3xx6..5xx
@x.x.x.x.x"xxxx..xxx
........''xxxxxxxxxx
ENDMAP

NAME:    hangedman_elf_disciples
TAGS:    no_monster_gen misc_elf_vault
DEPTH:   Elf
MONS:    deep elf pyromancer / deep elf zephyrmancer
# Some other fledgling miscellaneous magic casters.
MONS:    arcanist / occultist, tengu conjurer, boggart, kobold demonologist
MONS:    deep elf sorcerer / deep elf annihilator w:2
NSUBST:  2 = 1:2 / 1:4 / 1:. / * = 223445
NSUBST:  - = 1:+ / *:c, _ = 1:+ / *:c
NSUBST:  X = 1:x / *:., Y = 1:x / *:.
SUBST:   Z : x.
MAP
      Z......
      .....xxx
    Z....xx.1x
    ...xx.1..x
  Z..xx......x
  ..x2..XXXX.x
Z...x.......2x
...x...cc---cx
...x.Y.c2...cx
..x..Y._.1..cx
..x1.Y._..6.cx
.x...Y._...%cx
.x1...2ccccc%x
 xxxxxxxxxxxxx
ENDMAP

NAME:    minmay_guarded_unrand_folly
DEPTH:   Elf
ORIENT:  float
ITEM:    robe_of_folly no_pickup
MONS:    deep elf sorcerer / deep elf annihilator
NSUBST:  1 = 2:2 / 5=1.. / .
SUBST:   2 = 1.
MAP
ccccccc@ccccccc
c.1...c.c...1.c
c.c..cc.cc..c.c
c.c.cc...cc.c.c
c.c1...1...1c.c
c.cc.1.c.1.cc.c
c..ccccccccc..c
c.1..c*2*c..1.c
cc.1..2d2..1.cc
 cc..c*2*c..cc
  ccccccccccc
ENDMAP

NAME:   cheibrodos_elf_bladeworks
TAGS:   no_item_gen no_monster_gen
DEPTH:  Elf
ORIENT: float
MONS:   deep elf knight / deep elf archer w:8, deep elf blademaster
KMONS:  P = plant
ITEM:   short sword w:15 / rapier w:8 / athame w:2 / quick blade w:1
ITEM:   short sword good_item w:8 / rapier good_item w:5 / \
        athame good_item w:2 / quick blade good_item w:2
SUBST:  x = xc
SUBST:  3 = 3.
NSUBST: - = 3:1 / 3=1., d = 1:e / 2=ddde / *:d
MAP
  xxxxxxxxx
  xddddd+.xx
.xxmmmmmx.1x
.x3.-----..xx
.+..-----..Px
@+..-----.2Gx
.+..-----..Px
.x3.-----..xx
.xxmmmmmx.1x
  xddddd+.xx
  xxxxxxxxx
ENDMAP

NAME:   nicolae_elf_altarnating
TAGS:   transparent no_monster_gen no_item_gen misc_elf_vault
DEPTH:  Elf
WEIGHT: 5
: if crawl.coinflip() then
KMONS:  1 = dancing weapon ; any weapon
KMONS:  _ = dancing weapon ; any weapon good_item | any weapon randart w:5
KFEAT:  _ = altar_uskayaw
: else
KMONS:  1_ = fire elemental / water elemental / air elemental / earth elemental
KFEAT:  _ = altar_qazlal
: end
SUBST:  1 = 111..
MAP
xxxxx
x111x
x1_1+
x111x
xxxxx
ENDMAP

NAME:  nicolae_elf_archery_training
TAGS:  transparent no_item_gen
DEPTH: Elf
# Arrows were here. They're gone now. RIP
KITEM: " = shortbow / longbow / shortbow good_item / longbow good_item / \
           pair of gloves ego:hurling / pair of gloves ego:dexterity / \
           pair of gloves plus:1 / pair of gloves plus:2 / \
           scarf ego:repulsion / scarf w:4 / amulet of reflection / \
           any amulet w:3 / gold good_item / manual of ranged weapons w:3
KMONS: D = training dummy
MONS:  deep elf archer / nothing w:5
MONS:  deep elf master archer
MAP
     x@@xxx
   xxx...'x
 xxx1....Dx
xx..1....'x
x"2.1....Dx
xx..1....'x
 xxx1....Dx
   xxx...'x
     x@@xxx
ENDMAP

NAME:   nicolae_elf_blasts_and_bolts
TAGS:   transparent misc_elf_vault
DEPTH:  Elf
MONS:   deep elf knight / deep elf pyromancer / deep elf zephyrmancer
MONS:   deep elf annihilator, deep elf elementalist / thermic dynamo w:4
NSUBST: D = 2 / 3 / * = 1:60 .:60 1 2
SUBST:  E = 1:140 .:140 1 2, % = %%%*., G : GGx
: vault_metal_statue_setup(_G, "G", "arcane conduit")
MAP
ccc..............ccc
ccc..cc..cc..cc..ccc
ccc..cc..cc..cc..ccc
...E......E.....E...
....................
.cc..Gxx.D..xxx..cc.
.cc..xxx....xxx..cc.
.....xxxx%%xxxx.....
.......xxxxxx.......
.ccE...%xxxx%.D..cc.
.cc..D.%xxxx%...Ecc.
.......xxxxxx.......
.....xxxx%%xxxx.....
.cc..xxx....xxx..cc.
.cc..xxx..D.xxG..cc.
....................
...E.....E......E...
ccc..cc..cc..cc..ccc
ccc..cc..cc..cc..ccc
ccc..............ccc
ENDMAP

NAME:   nicolae_elf_crossing_hall
TAGS:   transparent misc_elf_vault
DEPTH:  Elf
: if crawl.coinflip() then
KFEAT:  + = closed_clear_door
: end
NSUBST: H = + / c++
SUBST:  c : cxvbm, D : cxvbm., F : cxvbm., E : cvxbm0, 0 = .:15 0:5 9:1
MAP
       c+c
      cc.cc
     cc...cc
    cc.0D0.cc
   cc..DDD..cc
  cc...0D0...cc
 cc...........cc
cc.0F0.0E0.0F0.cc
H..FFF.EEE.FFF..H
cc.0F0.0E0.0F0.cc
 cc...........cc
  cc...0D0...cc
   cc..DDD..cc
    cc.0D0.cc
     cc...cc
      cc.cc
       cHc
ENDMAP

NAME:   nicolae_elf_deep_friendship
TAGS:   transparent
DEPTH:  Elf
KMONS:  1 = deep troll earth mage
KMONS:  2 = deep troll
KMONS:  3 = deep elf knight
SUBST:  % = *%%
NSUBST: E = 1 / 1DDDD, D = 2=2 / 2=3 / 23..
MAP
     cccccccccccc
     cbb......bbc
     cb..E..D..bc
cccccc....bb....ccccc
cb%%..E..xxxx..D....c
cb%%E...bxxxxb...D..+
cb%%E...bxxxxb...D..+
cb%%..E..xxxx..D....c
cccccc....bb....ccccc
     cb..E..D..bc
     cbb......bbc
     cccccccccccc
ENDMAP

NAME:  nicolae_elf_deep_mausoleum
TAGS:  transparent patrolling no_monster_gen
DEPTH: Elf
KMONS: 1 = deep elf death mage
KMONS: V = deep elf death mage / nothing
KMONS: 2 = flayed ghost / shadow wraith / phantasmal warrior / \
           eidolon w:15 / ghoul / vampire mage w:20 / vampire knight / jiangshi
KMONS: 3 = lost soul / weeping skull / spectral deep elf blademaster / \
           deep elf blademaster simulacrum / spectral deep elf knight / \
           deep elf knight simulacrum
KMONS: B = pile of debris
KITEM: S = large rock q:1 / stone
KITEM: % = % / * w:5
KITEM: * = * / | w:5
KFEAT: 1V = V
SUBST: 2 = 22., 3 = 33., D = 32., G = G:85 S B:5
FTILE: .+%*|12GVSB = floor_necro_squares
: vault_granite_statue_setup(_G, "G", "gravestone")
MAP
cccccccccccccccccccccc
ccccG*GcccG%GcccG%Gccc
ccc.2.2.c.D.D.c.3.3.cc
ccG2...2GD...DG3...3Gc
cc|..1.....V.....V...+
ccG2...2GD...DG3...3Gc
ccc.2.2.c.D.D.c.3.3.cc
ccccG*GcccG%GcccG%Gccc
cccccccccccccccccccccc
ENDMAP

# Sometimes when you're trying to make a weapon dance, you mess it up instead,
# so now it's just wandering around bumping into things, and then instead of
# cleaning up your mess, you shove all of your mistakes into a closet and hope
# nobody notices. We've all been there.
NAME:  nicolae_gammafunk_elf_defective_weapons_storage
TAGS:  transparent no_monster_gen
DEPTH: Elf
KITEM: 123 = % w:20 / scroll of enchant weapon pre_id w:5 \
       / scroll of brand weapon pre_id w:5
{{
-- Fast dancing weapons. This will have chaos, but will be nerfed a lot by
-- vitrification
local chaos_types = { ["spear"] = 2, ["trident"] = 2, ["mace"] = 2,
    ["flail"] = 2, ["dire flail"] = 2, ["quarterstaff"] = 2,
    ["long sword"] = 2, ["scimitar"] = 2, ["short sword"] = 2, ["athame"] = 2,
    ["rapier"] = 2, ["quick blade"] = 1, ["hand axe"] = 2, ["war axe"] = 2 }
-- Slower weapons that will get distortion and become less than normal speed
-- with slowness
local disto_types = { ["halberd"] = 1, ["morningstar"] = 1, ["great mace"] = 1,
    ["giant club"] = 1, ["great sword"] = 1, ["battleaxe"] = 1}
-- Highest quality types we'll degrade and will have venom.
local venom_types = { ["demon trident"] = 1, ["partisan"] = 1,
    ["bardiche"] = 2, ["giant spiked club"] = 2, ["lajatang"] = 1,
    ["double sword"] = 1, ["triple sword"] = 1, ["broad axe"] = 1,
    ["battleaxe"] = 2, ["executioner's axe"] = 1 }
kmons("1 = dancing weapon perm_ench:vitrified ; " ..
    dgn.random_item_def(chaos_types, "chaos", nil, "|"))
kmons("2 = dancing weapon perm_ench:slow ; " ..
    dgn.random_item_def(disto_types, "distortion", nil, "|"))
kmons("3 = dancing weapon perm_ench:corrosion ; " ..
    dgn.random_item_def(venom_types, "venom", "damaged", "|"))
}}
NSUBST: 1 = 2=1 / 2=2 / 3 / * = 1 2 3:5 .:50
MAP
ccc===ccc
c1..1..1c
c1.111.1c
c1..1..1c
ccc...ccc
  c111c
  ccccc
ENDMAP

NAME:  nicolae_elf_double_double_double_trouble
TAGS:  transparent
DEPTH: Elf
KMASK: 1*%- = opaque
KMASK: = = opaque
KMASK: 1*%- = no_monster_gen
# Each blademaster has one good_item or randart double sword.
KMONS: 1 = deep elf blademaster ; double sword good_item \
               | double sword randart  . double sword
KFEAT: 1 = T
MAP
cccccc
c*%--c..@
c%1--c.T.
c----=...
c---===ccc
ccc===---c
 ...=----c
 .T.c--1%c
 @..c--%*c
    cccccc
ENDMAP

NAME:    nicolae_elf_elemental_lessons
TAGS:    transparent
DEPTH:   Elf
KITEM:   P = randbook disc:fire slevels:5
KITEM:   Q = randbook disc:earth slevels:5
KITEM:   R = randbook disc:ice slevels:5
KITEM:   S = randbook disc:air slevels:5
MONS:    deep elf zephyrmancer / deep elf pyromancer
MONS:    deep elf elementalist
# A small chance of an elementalist transfer student:
MONS:    spriggan air mage / deep troll earth mage / \
         merfolk aquamancer / salamander tyrant
KMONS:   P = fire elemental
KMONS:   Q = earth elemental
KMONS:   R = water elemental
KMONS:   S = air elemental
SHUFFLE: PQRS
SUBST:   1 = 1. 3:2
MAP
    ..@..
ccccnc+cncccc
ccc.......ccc
cP+.1.1.1.+Qc
cnc..1.1..cnc
@.n.1.1.1.n.@
cnc..1.1..cnc
cR+.......+Sc
ccc...2...ccc
ccccccccccccc
ENDMAP

NAME:  nicolae_elf_free_trip_to_the_abyss
TAGS:  transparent
DEPTH: Elf
MONS:  chaos spawn / nothing
MONS:  patrolling dancing weapon ; short sword ego:distortion \
           | falchion ego:distortion | hand axe ego:distortion \
           | whip ego:distortion | spear ego:distortion
MONS:  deep elf sorcerer / deep elf demonologist
KFEAT: E = enter_abyss
KFEAT: -z = x
FTILE: DE'- = floor_nerves
TILE:  - = wall_abyss
TILE:  z = wall_baleful
MAP
   ...z
   ....x
  ...11.x
....1'''-x
...1'''2-x
..1'''''-x
z.1'''3--x
 x.'2'--xx
  x----xx
   xxxxx
ENDMAP

NAME:  nicolae_elf_hall_of_bonks
TAGS:  transparent no_monster_gen
DEPTH: Elf
MONS:  dancing weapon ; whip | club | mace | flail | morningstar \
           | demon whip | dire flail | eveningstar | great mace | giant club \
           | giant spiked club | any magical staff | quarterstaff
MONS:  dancing weapon ; morningstar good_item | demon whip good_item \
           | dire flail good_item | eveningstar good_item \
           | great mace good_item | giant club good_item \
           | giant spiked club good_item | any magical staff good_item \
           | quarterstaff good_item
SUBST: 1 = 1. 2:1
MAP
  ccccccc
 cc.....cc
 c.1.1.1.c
.=..1n1..c
.=.1nnn2.c
.=..1n1..c
 c.1.1.1.c
 cc.....cc
  ccccccc
ENDMAP

NAME:    nicolae_elf_loose_elemental_storage
TAGS:    transparent no_trap_gen no_monster_gen no_item_gen
DEPTH:   Elf
KITEM:   P = staff of fire / randbook disc:fire / wand of flame \
         / ring of protection from fire \
         / any weapon ego:flaming / any armour ego:fire_resistance \
         / scroll of immolation
KITEM:   Q = staff of earth / randbook disc:earth / wand of digging \
         /  ring of protection / tin of tremorstones \
         / any weapon ego:protection / any weapon ego:heavy
KITEM:   R = staff of cold / randbook disc:ice / wand of iceblast \
         / ring of protection from cold / phial of floods \
         / any weapon ego:freezing / any armour ego:cold_resistance
KITEM:   S = staff of air / randbook disc:air / ring of flight \
         / ring of evasion / condenser vane / lightning rod \
         / any weapon ego:electrocution
KMONS:   1P = fire elemental / thermic dynamo w:2
KMONS:   2Q = earth elemental
KMONS:   3R = water elemental / thermic dynamo w:2
KMONS:   4S = air elemental
SHUFFLE: DE, FH, JKL, P1 / R3, Q2 / S4
SUBST:   1 = 1., 2 = 2., 3 = 3., 4 = 4., DF = +, EHJ = m, KL = x
MAP
@...xxx...@
.x++xxxDDx.
.m111L222E.
.m111K222E.
xx11PJQ22xx
xxJKLxLKJxx
xx44SJR33xx
.m444K333F.
.m444L333F.
.x++xxxHHx.
@...xxx...@
ENDMAP

NAME:  nicolae_elf_martial_mastery
TAGS:  transparent
DEPTH: Elf
MONS:  deep elf blademaster / deep elf master archer
SUBST: T : TTT., U : UUU.
MAP
   xxxxx
 xxx.T.xxx
xx.U...U.xx
xT...1...Tx
+.........+
+.........+
xU...1...Ux
xx.T...T.xx
 xxx.U.xxx
   xxxxx
ENDMAP

NAME:   nicolae_elf_shapeshifter_party
TAGS:   transparent patrolling misc_elf_vault no_monster_gen
DEPTH:  Elf
MONS:   shapeshifter / glowing shapeshifter w:5
ITEM:   potion of mutation / potion of lignification / wand of polymorph / \
        randbook disc:alchemy / any potion / any wand / randbook / \
        any good_item w:30
KFEAT:  T = fountain_eyes
SUBST:  Z = x., z = ddFFx, E = Fx, . = 1 .:90
: single_cloud(_G, "F", "mutagenic fog", true)
MAP
    xxxxx
   xxzdzxx
  xxZ...Zxx
 xxZ.....Zxx
xxZT......Zxx
xZ....E....Zx
+....EEE....+
xZ....E....Zx
xxZ......TZxx
 xxZ.....Zxx
  xxZ...Zxx
   xxzdzxx
    xxxxx
ENDMAP

NAME:   nicolae_elf_theology_debate
TAGS:   transparent misc_elf_vault
DEPTH:  Elf
MONS:   orc knight, deep elf knight
: if crawl.coinflip() then
KMONS:  3 = orc high priest
KMONS:  4 = deep elf high priest
KFEAT:  4 = altar_vehumet / altar_makhleb / altar_sif_muna
SUBST:  b = G
: else
KMONS:  3 = orc sorcerer
KMONS:  4 = deep elf sorcerer
KFEAT:  4 = altar_lugonu
SUBST:  b = GGb
TILE:   b = bedevilled_crystal_abyss
:   set_feature_name("crystal_wall", "bedevilled crystal wall")
: end
KFEAT:  3 = altar_beogh
SUBST:  % = %%*, * = **|, S = 12, 1 = 11., 2 = 22.
MAP
xxxxxxxxxxxxxxxxx
xx...xx...xx...xx
x..2....S....1..x
x.2b2..SGS..1G1.x
x..2....S....1..x
xx...xx+++xx...xx
xx.2.xx...xx.1.xx
xU...Ux.S.xI...Ix
x..4..xS.Sx..3..x
xU...Ux...xI...Ix
xx%*%xx...xx%*%xx
xxxxxxx@@@xxxxxxx
ENDMAP

NAME:  nicolae_elf_vaults_five_recruitment_drive
TAGS:  patrolling transparent no_item_gen no_monster_gen
DEPTH: Elf
KITEM: 2 = $ / % / nothing w:40
KMONS: 1 = deep elf high priest / deep elf death mage / deep elf annihilator / \
           deep elf demonologist / deep elf sorcerer
KMONS: 2 = vault guard / nothing w:2
KMONS: 3 = deep elf archer / deep elf pyromancer / deep elf zephyrmancer / \
           deep elf knight / vault sentinel w:5
MAP
          x
        xxxxx
      xxx$x3xxx.@
    xxx'2$x...+xx
  xxx%''2'x.3...xxx
xxxG*%1'2'+...3.3Gxxx
  xxx%''2'x.3...xxx
    xxx'2$x...+xx
      xxx$x3xxx.@
        xxxxx
          x
ENDMAP

NAME:   hellmonk_elf_help
TAGS:   transparent no_item_gen
DEPTH:  Elf
KITEM:  ' = randbook title:Get_Rich_Quick! disc:alchemy /\
            randbook title:Seven_Elven_Habits numspells:7 /\
            randbook title:Passive_Income disc:Summoning \
                disc2:Necromancy /\
            randbook title:Big_Dreams_And_Success numspells:2 slevels:18 /\
            randbook title:The_Trick_To_Life numspells:1 /\
            manual of invocations w:3
KMONS:  ' = deep elf death mage / deep elf sorcerer / deep elf annihilator /\
            deep elf demonologist
SUBST:  8 = 80, 0 = 0., A : GccT
TILE:   c = wall_studio
MAP
  xxxxx
 xxcccxx
xxc.'.cxx
xc8.A.8cx
xc..0..cx
xcA.A.Acx
xc..0..cx
xc0.A.0cx
xxc...cxx
 xx+++xx
   @@@
ENDMAP

# Layout modified from the long-gone evilmike_dwarf_pyromaniacs.
NAME:    regret_index_elf_centigrade
TAGS:    no_monster_gen no_pool_fixup misc_elf_vault
DEPTH:   Elf
MONS:    fire elemental, dancing weapon ; short sword ego:freezing
MONS:    deep elf pyromancer, deep elf knight, thermic dynamo
ITEM:    ring of protection from fire, ring of protection from cold
ITEM:    staff of fire no_pickup, staff of cold no_pickup
KFEAT:   - = closed_clear_door
SUBST:   0 = 12, 9 = 33344455
SHUFFLE: df, df / eg
: if crawl.coinflip() then
SUBST:   ! = l, ? = G, ~ = w
:   vault_metal_statue_setup(_G, "G", "icy conduit")
: else
SUBST:   ! = G, ? = w, ~ = l
:   vault_metal_statue_setup(_G, "G", "fiery conduit")
: end
MAP
   xxxxxxxx
   x!x...$x
   xx...x3xxxx
   x....1.xxxx
   x...1x---xxxxx
   x...xxxx..x0dx
xxxxx+xxb.xx..fxxxxx
@......xx..x$.9xbbbx
....0x.+..5x%5.5-~bx
@......xx..x$.9xbbbx
xxxxx+xxb.xx..dxxxxx
   x...xxxx..x0fx
   x...2x---xxxxx
   x....2.xxx
   xx...x4x
   x?x...$x
   xxxxxxxx
ENDMAP

##############################################################################
#
# <<4>> Elf:2 Hall of Blades entry vaults.
#
##############################################################################

NAME:   mumra_blade_entry_bloodbath
TAGS:   no_item_gen
SUBST:  d = ..', e = .'', f = .'''
KPROP:  ' = bloody
SUBST:  ' = ...'
KITEM:  ' = short sword / long sword / morningstar / mace / \
            scimitar / dagger / bardiche / battleaxe / war axe
: elven_blade_entry(_G)
MAP
      =
xx-1-x-x-1-xx
x.d...xdd...x
..dd..ded....
..deeeeee..dd
...eefffeeed.
x..efffffee.x
.xeeffGffe.x.
xdeefffffe..x
dddeefffeee..
....eee.edd..
....dd...dd..
x...d.x...ddx
xx..dx.x..dxx
ENDMAP

# Sorry for the shape mangling,
# but the subvaulting needs it.
NAME:     mumra_blade_entry_dagger
TAGS:     no_item_gen
SUBST:    ' : ll.
FTILE:    1 = floor_vault
SUBST:    . : ..W, @ : @xx
: elven_blade_entry(_G)
MAP
      =
    xx-xx
   xx'-'xx
   xx'-'xx
   xx'-'xx
   x''-''x
   x''-''x
xxxx''-''xxxx
.-----1-----.
xx....-....xx
xxxxx.-.xxxxx
   xx.-.xx
   xx.-.xx
   xxx-xxx
ENDMAP

NAME:     infiniplex_blade_entry_pillars
SUBST:    y : x...
SUBST:    1 = 1.
: elven_blade_entry(_G)
MAP
      =
   xy---yx
   y..c..y
.  ..1.1..  .
....c...c....
.  ..1.1..  .
   y..c..y
   xy...yx
      .
      .
      .
      .
      .
     ...
ENDMAP

NAME:     grunt_blade_entry_basic
TAGS:     no_item_gen
NSUBST:   1 = 2:1 / *:.
: elven_blade_entry(_G)
MAP
      =
....c---c....
....c...c....
..ccc...ccc..
..c.......c..
..c.1...1.c..
..c.......c..
..+.......+..
..c.......c..
..c.1...1.c..
..c.......c..
..cccc+cccc..
.............
.............
ENDMAP

NAME:  nicolae_vaults_blade_armed_guards
KMONS: 2 = deep elf knight ; hand axe | war axe | broad axe | battleaxe | \
                             flail | morningstar | great mace | \
                             short sword | long sword | scimitar | \
                             trident | partisan | glaive | . \
                             chain mail | plate armour .  kite shield | \
                             buckler w:20 | nothing w:60
: elven_blade_entry(_G)
MAP
      =
    xx-xx
    x---x
  xxx...xxx
  x...c...x
  x.c.c.c.x
 ....2.2....
...cc...cc...
 ....2.2....
  x.c.c.c.x
  x...c...x
  xxx...xxx
     ...
     ...
ENDMAP

NAME:    nicolae_blade_entry_hurt_lockers
SHUFFLE: Aa/Bb/Dd, TG
SUBST:   BD = x, bd = 1, A = +, a = ., T : T., G : G.
: elven_blade_entry(_G)
MAP
      =
 xccc---cccx
 xc-------cx
 xc-------cx
 xcAxxBxxDcx
xxcaxxbxxdcxx
xxc+xx+xx+cxx
xxc.GT.TG.cxx
 xc.......cx
 xcc.....ccx
 xccc...cccx
 xxxxx+xxxxx
.............
     ...
ENDMAP

NAME:  nicolae_blade_entry_crossed_weapons
: elven_blade_entry(_G)
MAP
      =
v.v..---..v.v
.v...v-v...v.
v.v..vvv..v.v
...v..c..v...
....1.c.1....
.vv...c...vv.
..vcccccccv..
.vv...c...vv.
....1.c.1....
...v..c..v...
v.v..vvv..v.v
.v...v.v...v.
v.v.......v.v
ENDMAP

NAME:   nooodl_blade_entry_preview
TAGS:   no_item_gen
SUBST:  C : cc.
NSUBST: 1 = 2:1 / *:.
: elven_blade_entry(_G)
MAP
      =
 xcC-----Ccx
 xcC.c-c.Ccx
 xcC.1.1.Ccx
 xcC.....Ccx
 xcC.c-c.Ccx
 xcC.1.1.Ccx
xxcC.....Ccxx
 xcC.1.1.Ccx
 xcC.c-c.Ccx
 xcC.....Ccx
 xcC.1.1.Ccx
 xcC.c-c.Ccx
 xcc.....ccx
ENDMAP

NAME: nicolae_blade_entry_diamond_columns
: elven_blade_entry(_G)
SUBST: 1 = 1.., c : cv
MAP
      =
...-------...
...c-...-c...
..ccc-.-ccc..
.ccccc-ccccc.
..ccc.1.ccc..
...c.....c...
....1.1.1....
...c.....c...
..ccc.1.ccc..
.ccccc.ccccc.
..ccc...ccc..
...c.....c...
.............
ENDMAP

NAME: nicolae_blade_entry_area_security
: elven_blade_entry(_G)
SUBST: b : bmc
KMONS: 2 = deep elf pyromancer / deep elf zephyrmancer
MAP
      =
...c-----c...
.b.m-.1.-m.b.
...c-----c...
.b.ccc+ccc.b.
...c.....c...
.b.+.....+.b.
...c.2.2.c...
.b.c.....c.b.
...cc...cc...
.b..mmmmm..b.
..2.......2..
.b.b.b.b.b.b.
.............
ENDMAP

NAME: nicolae_blade_entry_pointy_end
: elven_blade_entry(_G)
NSUBST: 1 = 2:1 / *:.
MAP
      =
vvvvvx-xvvvvv
v1vvvx-xvvv1v
v...vx-xv...v
vv.........vv
 v.1.....1.v
 vv.......vv
  v.......v
  vv.1.1.vv
   v.....v
   vv...vv
    v...v
    vv.vv
     v.v
ENDMAP

NAME: nicolae_blade_entry_floor_patterns
TAGS: no_pool_fixup
NSUBST: 1 = 2:1 / *:.
SHUFFLE: :X/:w/::/ww/wX/XX
SUBST: : = -, X = x, C : -wx
: elven_blade_entry(_G)
MAP
      =
xxxxx---xxxxx
xxxxx...xxxxx
xxCCC...CCCxx
xxC...:...Cxx
xxC.1:::1.Cxx
-...::X::...-
-..::XXX::..-
-...::X::...-
xxC.1:::1.Cxx
xxC...:...Cxx
xxCCC...CCCxx
xxxxx...xxxxx
xxxxx---xxxxx
ENDMAP

NAME: nicolae_blade_entry_splitting_headache
: elven_blade_entry(_G)
SHUFFLE: AB, CD
NSUBST: I = 2:1 / *:., i = 2:1 / *:.
SUBST: AC = x, BD = b
MAP
      B
xxxx--A--xxxx
xDC...B...CDx
xC....A....Cx
x..I.ABA.i..x
x....BxB....x
A...BAxAB...A
B.I.AxxxA.i.B
A...BAxAB...A
x....BxB....x
x..I.ABA.i..x
xC....A....Cx
xDC...B...CDx
xxxxB.A.Bxxxx
ENDMAP

NAME: nicolae_blade_entry_sentries_behind_glass
: elven_blade_entry(_G)
SUBST: 1 = 1..
KMONS: 2 = dancing weapon
FTILE: 2m = floor_vault
COLOUR: 2 = lightgrey
MAP
      =
cccc2m-m2cccc
c.-mmm-mmm-.c
c.---------.c
c...1.c.1...c
..c.......c..
.ccc.....ccc.
..c...c...c..
.....ccc.....
 .1.ccccc.1.
 ....ccc....
  ....c....
   .......
     ...
ENDMAP

NAME: nicolae_blade_entry_antechamber
: elven_blade_entry(_G)
NSUBST: A = 2:1 / *:.
MAP
      =
xxxxx---xxxxx
xxxxx---xxxxx
xxxxx---xxxxx
xxxx.....xxxx
xx....A....xx
x..A.....A..x
x...xbmbx...x
...xx...xx...
.A.b.....b.A.
...m..1..m...
...b.....b...
...xx...xx...
@...xb+bx...@
ENDMAP

NAME:  nicolae_blade_bullseye
TAGS:  no_item_gen
KMONS: 2 = patrolling dancing weapon ; sling | shortbow | orcbow | \
           longbow w:5 | hand cannon w:5 | arbalest | triple crossbow w:5
: elven_blade_entry(_G)
FTILE: ' = floor_vault
MAP
      =
xxxx-----xxxx
xx---...---xx
x-'.......'-x
x-...---...-x
--..-'2'-..--
'..-'...'-..'
'..-2.-.2-..'
'..-'...'-..'
--..-'2'-..--
x-...---...-x
x-'.......'-x
xx---...---xx
xxxx-'''-xxxx
ENDMAP

NAME:  nicolae_blade_lattice
SUBST: 1 = 1., b : bbbc, v : vvvm
: elven_blade_entry(_G)
MAP
      =
...b.....b...
.1v-v...v-v1.
.v-.-v1v-.-v.
b-...-b-...-b
.v-.-v.v-.-v.
..v-v...v-v..
..1b..1..b1..
..v-v...v-v..
.v-.-v.v-.-v.
b-...-b-...-b
.v-.-v1v-.-v.
.1v-v...v-v1.
...b.....b...
ENDMAP

NAME:    nicolae_blade_little_rooms
KMONS:   2 = patrolling dancing weapon ; dagger good_item \
         | mundane falchion w:6
SHUFFLE: EFH
SUBST:   1 = 1--, 2 = 2.., D : xxm, EF : x, H : xmm
FTILE:   1 = floor_vault
: elven_blade_entry(_G)
MAP
      =
xxxxx...xxxxx
x-1-D.2.D-1-x
x---D...D---x
x+x+x+x+x+x+x
x.E---F---E.x
x.E-1-F-1-E.x
x2xHHHxHHHx2x
x.E.2.F.2.E.x
x.E...F...E.x
x+x+x+x+x+x+x
x---D...D---x
x-1-D.2.D-1-x
xxxxx...xxxxx
ENDMAP

NAME:   nicolae_blade_tridents
TAGS:   transparent
KMONS:  23 = patrolling dancing weapon ; trident
SUBST:  2 = 22.
: elven_blade_entry(_G)
MAP
      =
xxxxx-.-xxxxx
xxxxx-.-xxxxx
xxxxx-3-xxxxx
xxxxx-.-xxxxx
xxxxx-.-xxxxx
xxx...2...xxx
xx..xx.xx..xx
xx.xxx.xxx.xx
xx.xxx.xxx.xx
xx.xxx.xxx.xx
xx.xxx.xxx.xx
x.2.x.2.x.2.x
xx@xxx.xxx@xx
ENDMAP

##############################################################################
#
# <<5>> Elf:2 Hall of Blades main vaults.
#
##############################################################################

NAME:     elven_hall_of_blades_hangedman_original
ORIENT:   north
: hall_of_blades_monsters(_G)
: hall_of_blades_extra_rewards(_G)
# Two enchant weapon scrolls, third or a brand weapon,
# 33% chance for a blade talisman or 2% chance for a weapons manual.
SUBST:    e = ed, f = f:33 g:2 .:65
SHUFFLE:  CD / CD / DC / DC / DD
SUBST:    C = c, D = ., E : c--, F : c--, c : cv
: hall_of_blades_setup(_G, "-")
# Previously for Blade: NSUBST:  . : 6:0 / 6 = 0. / 6 = 0... / *:.
NSUBST:   . = 6=1 / 3=2 / 34 / 4=4 / 2=42 / 6=14...
SUBVAULT: A : elf_blade_entry
SUBST:    A : x"", ' = .
CLEAR:    "
MAP
                                "
                                "
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccx
xcccc---cccc-cccc-cccc-cccc-F-ccccc-F-cccc-cccc-cccc-cccc---ccccx
xccF-....cc-.-cc-.-cc-.-cc-...-ccc-...-cc-.-cc-.-cc-.-cc-...-Fccx
xcc-............................7............................-ccx
xc-....c............--c--................-c--............c....-cx
xc-...ccc...........-ccc-...............-ccc-...........ccc...-cx
xcE..ccccc..........ccccc...............ccccc..........ccccc..Ecx
xcE..ccccc..........-ccc-...............-ccc-..........ccccc..Ecx
xc-..4ccc...........--c--...............--c--...........ccc4..-cx
xcE...ccc...............................................ccc...Ecx
xcE....c.................................................c....Ecx
xc-............................D.D............................-cx
xc-...........CC..............DDDDD..............CC...........-cx
xcE5ed2......CCCC.............DDDDD.............CCCC......2df6Ecx
xc-...........CC..............DDDDD..............CC...........-cx
xc-............................D.D............................-cx
xcE....c.................................................c....Ecx
xcE...ccc...............................................ccc...Ecx
xc-..4ccc...........--c--...............--c--...........ccc4..-cx
xc-..ccccc..........-ccc-...............-ccc-..........ccccc..-cx
xcE..ccccc..........ccccc...............ccccc..........ccccc..Ecx
xcE...ccc...........-ccc-...............-ccc-...........ccc...Ecx
xc-....c............--c--...............--c--............c....-cx
xcc-.........................................................-ccx
xccF-...-cc-.-cc-.-cc-.-cc-''''ccc''''-cc-.-cc-.-cc-.-cc-...-Fccx
xcccc---cccc-cccc-cccc-cccc-F'++c++'F-cccc-cccc-cccc-cccc---ccccx
xcccccccccccccccccccccccccccccc---cccccccccccccccccccccccccccccxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc=A=cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                          AAAAAAAAAAAAA
                          AAAAAAAAAAAAA
                          AAAAAAAAAAAAA
                          AAAAAAAAAAAAA
                          AAAAAAAAAAAAA
                          AAAAAAAAAAAAA
                          AAAAAAAAAAAAA
                          AAAAAAAAAAAAA
                          AAAAAAAAAAAAA
                          AAAAAAAAAAAAA
                          AAAAAAAAAAAAA
                          AAAAAAAAAAAAA
                          AAAAAAAAAAAAA
                                @
ENDMAP

NAME:     elven_hall_of_blades_hangedman_alternative
WEIGHT:   5
ORIENT:   north
: hall_of_blades_monsters(_G)
: hall_of_blades_extra_rewards(_G)
SUBST:    e = ed, f = f:33 g:2 .:65
SHUFFLE:  CD / CD / DC / DC / DD
SUBST:    C = c, D = ., E : c--, F : c--, c : cv
NSUBST:   . = 6=1 / 3=2 / 34 / 4=4 / 2=42 / 6=14...
: hall_of_blades_setup(_G, "-")
SUBVAULT: A : elf_blade_entry
SUBST:    A : x, ' = .
CLEAR:    "
MAP
                                  "
                                  "
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccx
xcccc-F-cccc-cccc-cccc-cccc--cccc-F-cccc--cccc-cccc-cccc-cccc-F-ccccx
xccF-...-cc-.-cc-.-cc-.-cc-..-cc-.7.-cc-..-cc-.-cc-.-cc-.-cc-...-Fccx
xcc-..............................D..............................-ccx
xccc........................''''DDDDD''''........................cccx
xcc-..--c--.......--c--....'''''''D'''''''....--c--.......--c--..-ccx
xc-...-ccc-.......-ccc-....c'''''''''''''c....-ccc-.......-ccc-...-cx
xcc-..ccccc.......ccccc...ccc'''''''''''ccc...ccccc.......ccccc..-ccx
xccc..-ccc-.......-ccc-..ccccccc==A==ccccccc..-ccc-.......-ccc-..cccx
xccc..--c--.......--c--..cccAAAAAAAAAAAAAccc..--c--.......--c--..cccx
xcc-.....................-ccAAAAAAAAAAAAAcc-.....................-ccx
xc-.......................-cAAAAAAAAAAAAAc-.......................-cx
xcc-..........C..........-ccAAAAAAAAAAAAAcc-..........C..........-ccx
xccc.........CCC.........cccAAAAAAAAAAAAAccc.........CCC.........cccx
xccc.........CCC.........cccAAAAAAAAAAAAAccc.........CCC.........cccx
xcc-..........C..........-ccAAAAAAAAAAAAAcc-..........C..........-ccx
xc-.......................-cAAAAAAAAAAAAAc-.......................-cx
xcc-.....................-ccAAAAAAAAAAAAAcc-.....................-ccx
xccc...cc...........cc...cccAAAAAAAAAAAAAccc...cc...........cc...cccx
xccc..ccccc.......ccccc..cccAAAAAAAAAAAAAccc..ccccc.......ccccc..cccx
xcc-.ccccccc.....ccccccc.-ccAAAAAAAAAAAAAcc-.ccccccc.....ccccccc.-ccx
xc-...ccccc...2...ccccc...-cAAAAAAAAAAAAAc-...ccccc...2...ccccc...-cx
xc-....cc4....d....4cc....-c     @@@     c-....cc4....d....4cc....-cx
xcc-..........e..........-cc             cc-..........f..........-ccx
xccF-.........5.........-Fcc             ccF-.........6.........-Fccx
xcccc--EE-EE--E--EE--EE-cccc             cccc-EE--EE--E--EE-EE--ccccx
xccccccccccccccccccccccccccc             cccccccccccccccccccccccccccx
xxxxxxxxxxxxxxxxxxxxxxxxxxxx             xxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP

# Due to the orientation of this vault, I decided to just have a built-in
# entry, rather than trying to make the existing entry subvaults fit.
NAME:     nicolae_elf_blades_crystal_corner
ORIENT:   northwest
: hall_of_blades_monsters(_G)
KMONS:    8 = patrolling dancing weapon ; dagger good_item | mundane falchion w:6
: hall_of_blades_extra_rewards(_G)
SUBST:    e = ed, f = f:33 g:2 .:65
: if crawl.one_chance_in(4) then
SUBST:    FJH = b
: else
SHUFFLE:  FH
SUBST:    FJ = ., H : bb.
: end
SHUFFLE:  DE
SUBST:    D : bbbb-, E : ----b, K : b.., 8 = 8'
: hall_of_blades_setup(_G, "-~")
NSUBST:   . = 6=1 / 3=2 / 1=34 / 4=4 / 2=42 / 6=14...
SUBST:    b : bbbbcccv
CLEAR:    "
MAP
"
 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbx
 xbbbb---bbbbb---bbbbb---bbbbb---bbbbb---bbbbx
 xbbb-....bbb.....bbb.....bbb.....bbb....-bbbx
 xbb-7.....K.......K.......K...2...K.....6-bbx
 xb-....................................f..-bx
 xb-...4...............................d...-bx
 xb-.......................................-bx
 xbb......DDD.....EEE.........FFF..........bbx
 xbbb....DDDDD...EEEEE.......FFFFF..4.....bbbx
 xbbbK...DDDDD...EEEEE.......FFFFF.......Kbbbx
 xbbb....DDDDDD.EEEEEE......JFFFFFJ.......bbbx
 xbb......DDDDbbbEEEE.....HHHJbbbJHHH......bbx
 xb-........DbbbbbE......HHHHbbbbbHHHH.....-bx
 xb-.........bbbbb.......HHHHbbbbbHHHH..2..-bx
 xb-........EbbbbbD......HHHHbbbbbHHHH.....-bx
 xbb......EEEEbbbDDDD.....HHHJbbbJHHH......bbx
 xbbb....EEEEEE.DDDDDD......JFFFFFJ.......bbbx
 xbbbK...EEEEE...DDDDD.......FFFFF.......Kbbbx
 xbbb....EEEEE...DDDDD.......FFFFF........bbbx
 xbb......EEE.....DDD.........FFF..........bbx
 xb-.......................................-bx
 xb-.......................................-bx
 xb-.......................................-bx
 xbb..........HHH..................K......-bbx
 xbbb........HHHHH........'''''...bbb....-bbbx
 xbbbK.......HHHHH........'''''--bbbbb---bbbbx
 xbbb.......JHHHHHJ.......''''-bbbbbbbbbbbbbbx
 xbb......FFFJbbbJFFF.....'''==bxxxxxxxxxxxxxx
 xb-.....FFFFbbbbbFFFF....''-=~~'''''xxxxxx
 xb-..2..FFFFbbbbbFFFF.....-bb~'~''T''xxxxx
 xb-.....FFFFbbbbbFFFF.....-bx'~'~''8''xxxx
 xbb......FFFJbbbJFFF......bbx''~'~''8''xxx
 xbbb.......JHHHHHJ.......bbbx'''~'~''8''xx
 xbbbK.......HHHHH.......Kbbbx'T''~'~''8''x
 xbbb.....4..HHHHH........bbbx''8''~'~''8'x
 xbb..........HHH..........bbxx''8''~'~''Tx
 xb-.......................-bxxx''8''~'~''x
 xb-...d...................-bxxxx''8''~'~'x
 xb-..e........2...........-bxxxxx''8''~'~x
 xbb-5.....K.......K......-bbxxxxxx''T''~'~@
 xbbb-....bbb.....bbb....-bbbxxxxxxxxxxxx~~@
 xbbbb---bbbbb---bbbbb---bbbbx           @@@
 xbbbbbbbbbbbbbbbbbbbbbbbbbbbx
 xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP

# The design here was to try to get the entry vault on the short side of the
# main hall, so instead of having distinct "left" and "right" sides relative
# to the entrance, the layout is mostly "forward" from the entrance.
NAME:     nicolae_elf_blades_splatter_lattice
ORIENT:   north
: hall_of_blades_monsters(_G)
KMONS:    E = dancing weapon
: hall_of_blades_extra_rewards(_G)
SUBST:    e = ed, f = f:33 g:2 .:65
# 1/4 chance each of the scalloped edges being 0/1/2/3 tiles around.
SUBST:    P : Q., Q : RR., R : ccc.
: hall_of_blades_setup(_G, "7-")
NSUBST:   . = 6=1 / 3=2 / 34 / 4=4 / 2=42 / 6=14...
SHUFFLE:  MN
SUBVAULT: D : elf_blade_entry
SUBST:    D : x, M : b, N : cccb, v : vvvn
CLEAR:    "
MAP
                             "
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xcccccccccccccccccccccccccccccccccccccccccccccccx
xcRQP..-MMM-..PQRRQP..-MMM-..PQRRQP..-MMM-..PQRcx
xcQP..-v...v-..PQQP..-v...v-..PQQP..-v...v-..PQcx
xcP..-v.....v-..PP..-v.....v-..PP..-v.....v-..Pcx
xc..-v.d.....v-....-v-.....-v-....-v.......v-..cx
xc.-v.5.......v-..-v.--...--.v-..-v.........v-.cx
xc-v.e.........v--v...--.--...v--v...........v-cx
xcN.....2....4..NN.....---.....NN.............Ncx
xcN.............NN.....---.....NN.............Ncx
xc-v...........v--v...--.--...v--v...........v-cxDDDDDDDDDDDDD
xc.-v.........v-..-v.--...--.v-..-v.........v--cxDDDDDDDDDDDDD
xc-.-v...4...v-....-v-.....-v-....-v.......v-.-cxDDDDDDDDDDDDD
xcP-.-v.....v-......-v.....v-......-v.....v-E.-cxDDDDDDDDDDDDD
xcQP-.-v...v-........-v...v-........-v...v-...-ccDDDDDDDDDDDDD
xcRQP-.-MMM-..........-MMM-..........-MMM--...--=DDDDDDDDDDDDD@
xcRQP-7-MMM-..........-MMM-..........-MMM-..E.--DDDDDDDDDDDDDD@
xcRQP-.-MMM-..........-MMM-..........-MMM--...--=DDDDDDDDDDDDD@
xcQP-.-v...v-........-v...v-........-v...v--..-ccDDDDDDDDDDDDD
xcP-.-v.....v-......-v.....v-......-v.....v-E.-cxDDDDDDDDDDDDD
xc-.-v...4...v-....-v-.....-v-....-v.......v-.-cxDDDDDDDDDDDDD
xc.-v.........v-..-v.--...--.v-..-v.........v--cxDDDDDDDDDDDDD
xc-v...........v--v...--.--...v--v...........v-cxDDDDDDDDDDDDD
xcN.............NN.....---.....NN.............Ncx
xcN.....2....4..NN.....---.....NN.............Ncx
xc-v.f.........v--v...--.--...v--v...........v-cx
xc.-v.6.......v-..-v.--...--.v-..-v.........v--cx
xc..-v.d.....v-....-v-.....-v-....-v.......v-.-cx
xcP..-v.....v-..PP..-v.....v-..PP..-v.....v-.-Pcx
xcQP..-v...v-..PQQP..-v...v-..PQQP..-v...v-.-PQcx
xcRQP..-MMM-..PQRRQP.--MMM-..PQRRQP.--MMM---PQRcx
xcccccccccccccccccccccccccccccccccccccccccccccccx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP

##############################################################################
#
# <<6>> End vaults
#
# Total weight: 230.
##############################################################################

##############################################################################
## Classical elf_hall
##
NAME:    elf_hall
TAGS:    nolayout_halls
PLACE:   Elf:$
WEIGHT:  30
ORIENT:  northwest
: elf_setup(_G)
: elf_monsters(_G)
SUBST:   1=1., 2=2., 3=3., 4=4., 5=5.
SHUFFLE: 23, 45
: elf_loot_defenders(_G)
SUBST:   v = v .:2
SUBST:   v : xvb
: elf_loot_randomisation(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxcccccccccccccccccxxxxx
xxxxxxxxxxxxcc*|*|*|**|||||c$ccxxxx
xxxxxxxxxxxcc*$*|*|*|*|||||c$$ccxxx
xxxxxxxxxxcc*$|*$***$$|||||c|$$ccxx
xxxxxxxxxcc*$*|**ccccccccccc$$$$ccx
xxxxxxxxxc*|*$*$ccc..2..2..c+$|$$cx
xxxxxxxxxc$*$*ccc7........7.c$$$$cx
xxxxxxxxxc||**cc...5.5...4.4cc$|$cx
xxxxxxxxxc*$$cc..3.....3..ccccccccx
xxxxxxxxxc$+ccc.....2....cc.....5cx
xxxxxxxxxc$c....5.....5.cc....5..cx
xxxxxxxxxccc......5....cc..2....ccx
xxxxxxxxxxxc....5...2.cc.......ccxx
xxxxxxxxxxcc..1..U.....3.4..4..ccxx
xxxxxxxxxcc.....................ccx
xxxxxxxxxc..2........3........5..cx
xxxxxxxxxc.......2..2....3.......cx
xxxxxxxxxc..2................2..5cx
xxxxxxxxxc......v.........v..2...cx
xxxxxxxxxc..2..vv..1...1..vv.....cx
xxxxxxxxxc2..6vvv....1....vvv64.4cx
xxxxxxxxxc..vvvv.....c.....vvvv..cx
xxxxxxxxxc.vvv.....c.c.c.....vvv.cx
xxxxxxxxxc.v.3...ccc...ccc.3...v.cx
xxxxxxxxxc.3...cccc.....cccc.3.3.cx
xxxxxxxxxc...ccccc..c.c..ccccc...cx
xxxxxxxxxc.cccxxc..xc.cx..ccxccc.cx
xxxxxxxxxcccxxxxcc..c.c..ccxxxxcccx
xxxxxxxxxxxxxxxxxcc..@..ccxxxxxxxxx
ENDMAP


##############################################################################
## Alternative elf halls: gauntlets (David)
## A wide and a ( formerly) narrow one.

NAME:    elf_hall_gauntlet_wide
TAGS:    nolayout_halls
PLACE:   Elf:$
ORIENT:  float
TAGS:    no_pool_fixup
: elf_setup(_G)
: elf_monsters(_G)
SHUFFLE: 345
SUBST:   4=4., 2=2., 5=5., 3=3.
KMONS:   $ = weight:115 nothing / deep elf annihilator
KMONS:   * = weight:105 nothing / deep elf death mage
KMONS:   | = weight:290 nothing / deep elf sorcerer
KITEM:   $ = $
KITEM:   R = gold, shimmering gem
NSUBST:  $ = 1:R / *:$
KITEM:   * = *
KFEAT:   | = |
SUBST:   | = | *:2
SUBST:   * = * |:3
KMONS:   A = deep elf master archer
KITEM:   A = |
KMONS:   B = deep elf blademaster
KITEM:   B = |
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxx
xccccccccccccccccccccccccccx
xc2ccccccc........cccccccccx
xc.cccc2...5....5...2ccccccx
xc.cc..................ccccx
xc.c....3....45....3....c3cx
xc.+........U..U........+.cx
xc.c......2.2..2.2......c.cx
xc.cc......3....4......cc.cx
xc.ccc4cccccc..cccccc.cc..cx
xc2ccc.c.3.ww..ww.4.ccc...cx
xc.ccc..3..ww..ww..5......cx
xc$$$ccc...ww..ww...ccccc.cx
xc$$$ccc.1.ww..ww.5.ccccc.cx
xc$$$cccccccc2.cccccc1262.cx
xccc+cccccccc..cccccccccc.cx
xcB*|*|**|*cc..cc$|$*$|$|.cx
xc**|*|||||cc..cc|$|$*$*$.cx
xc*|*|||**|cc..cc$*$*$*$|.cx
xc|**|*|||Acc..ccA$|$|$|$2cx
xccccccccccccWWccccccccccccx
xccccccccccccWWccccccccccccx
xccccccccccccWWccccccccccccx
xxxxxxxxxxxxx@@xxxxxxxxxxxxx
ENDMAP

NAME:    elf_hall_gauntlet_narrow
TAGS:    nolayout_halls
PLACE:   Elf:$
ORIENT:  float
TAGS:    no_pool_fixup
: elf_setup(_G)
: elf_monsters(_G)
SHUFFLE: 345
SUBST:   4=4., 2=2., 5=5., 3=3.
SHUFFLE: lww
SHUFFLE: nNyYzZ / nNnNzZ / nNyYnN / nNnNnN
SUBST:   n =., N = @, yYzZ = c
KMONS:   $ = weight:115 nothing / deep elf annihilator
KMONS:   * = weight:105 nothing / deep elf death mage
KMONS:   | = weight:290 nothing / deep elf sorcerer
KITEM:   R = gold, shimmering gem
NSUBST:  $ = 1:R / *:$"
KITEM:   $ = $
KITEM:   * = *
KITEM:   | = |
SUBST:   | = | *:2
SUBST:   * = * |:3
KITEM:   6 = |
KITEM:   7 = |
KFEAT:   6 = 6
KFEAT:   7 = 7
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxx
xccccccccccccccccccccccccccx
xc2ccccccc........cccccccccx
xc.cccc2...5....5...2ccccccx
xc.cc..................cc6cx
xc.c....3....45....3....c3cx
xc.+........U..U........+.cx
xc.c......2.2..2.2......c.cx
xc.cc......3....4......cc.cx
xc.ccc4cccccc..cccccc.cc..cx
xc2ccc.c.3.ww..ww.4.ccc...cx
xc.ccc..3..ww..ww..5......cx
xc$$$ccc...ww..ww...ccccc.cx
xc$$$ccc.1.ww..ww.5.ccccc.cx
xc$$$cccccccc..ccccccc122.cx
xccc+cccccccc2.cccccccccc.cx
xc6*|*|**|*cc..cc$|$*$|$|.cx
xc**|*|||||cc..cc|$|$*$*$.cx
xc||*||***|cc..cc$*$*$*$|.cx
xc|**|*||7*cc..cc7$|$|$|$2cx
xcccccccccccc..ccccccccccccx
xccccccccccc....cccccccccccx
xcccccccccc..cc..ccccccccccx
Yyyyyyyyyyy.cccc.zzzzzzzzzzZ
Yyyyyyyyyy..cccc..zzzzzzzzzZ
ccccccccccNNnccnNNcccccccccc
ENDMAP

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

NAME:    minmay_elf_hall
TAGS:    nolayout_halls
PLACE:   Elf:$
ORIENT:  southwest
: elf_setup(_G)
: elf_monsters(_G)
SUBST:   1=11., 2=22., 3=33., 4=44., 5=543, 6=66., 7=77.
SHUFFLE: 12, 34, 67
: elf_loot_defenders(_G)
: elf_loot_randomisation(_G)
MAP
xxxxxxxxxxxxxcccc@.c.@ccccxxxxxxxxxxxxx
xxxxxxxxxxxxxc..x.....x..cxxxxxxxxxxxxx
xxxxxxxxxxxxxc....x.x....cxxxxxxxxxxxxx
xxxxxxxxxxxxxcx.........xcxxxxxxxxxxxxx
xxxxxxxxxxxxxc....x.x....cxxxxxxxxxxxxx
xxxxxxxxxxxxxc..x.....x..cxxxxxxxxxxxxx
xxxxcccccxxxxccccc.c.cccccxxxxcccccxxxx
xxccc...cccxxxxxcc...ccxxxxxccc...cccxx
xcc.......cccxccc.....cccxccc.......ccx
xc3.........ccc.........ccc.........4cx
xc....6......5...........5......6....cx
xc3.................................4cx
xcc......3.........7.........3......ccx
xxcc...............n...............ccxx
xxxc5............6nnn6............5cxxx
xxcc...............n...............ccxx
xcc.......4........7........4.......ccx
xc1.................................2cx
xc....7......5...........5......7....cx
xc1.........ccc.........ccc.........2cx
xcc.......cccxccc.....cccxccc.......ccx
xxccc...cccxxxxxccc.cccxxxxxccc...cccxx
xxxxcc+ccxxxxxxxxxc.cxxxxxxxxxcc+ccxxxx
xxxxc$*|cxxxxxxxxxc.cxxxxxxxxxc|*$cxxxx
xxxxc|*$cxxxxxxxxxc.cxxxxxxxxxc$*|cxxxx
xxxxcccccxxxxxxxxxc.cxxxxxxxxxcccccxxxx
xxxxxxxxxxxxxxxxxxc.cxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxc.cxxxxxxxxxxxxxxxxxx
xxxxxxxxcccccxxxccc.cccxxxcccccxxxxxxxx
xxxxxcccc|$*ccccc6...6ccccc*||ccccxxxxx
xxxccc*|$*|$$|+....U....+|$$|*$*$cccxxx
xxcc*$$*|$$|$$ccc7...7ccc|*|$$$||*$ccxx
xcc$*|*|*|*|cccxcccccccxccc$*$$*$$$|ccx
xc|*|$$|*ccccxxxxxxxxxxxxxcccc|*$||$*cx
xcccccccccxxxxxxxxxxxxxxxxxxxcccccccccx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP

##
NAME:    minmay_elf_hall_circle
PLACE:   Elf:$
ORIENT:  float
: elf_setup(_G)
: elf_monsters(_G)
SHUFFLE: 12345, 67
SUBST:   1=1., 2=2., 3=3., 4=4., 5=5.
: elf_loot_defenders(_G)
SUBST:   v = v .:2
SUBST:   v : xvb
: elf_loot_randomisation(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxcccccccccccxxxxxxxxxxx
xxxxxxxxccc$|$|$|$|$cccxxxxxxxxx
xxxxxxccc***$|$|$|$|$|cccxxxxxxx
xxxxxcc******$|$|$|$|$|$ccxxxxxx
xxxxcc**cc+cc|$|$|$|$|$|$ccxxxxx
xxxcc**cc5..cccc|$|$|$|$|$ccxxxx
xxxc****cc...2.ccccc$|$|$|$cxxxx
xxcc*****ccc......3cccccc$|ccxxx
xxc*****cc6cccc........5cccccxxx
xcccccccc.....ccccc.5......6ccxx
xc2........2......cccccc.....cxx
xc..........4................cxx
xc..3..5.......U..2........5.cxx
xc7..................4....1..cxx
xc.....2...vv.....vv.........cxx
xc..........vvvvvvv..3.......cxx
xc....2.......vvv.........2..cxx
xc.........3...v...7.........cxx
xc2.........5....4....4......cxx
xcc.5....4..................ccxx
xxc....vv6...4.......6vv...2cxxx
xxcc...vvv2......5..2vvv.5.ccxxx
xxxc3..vvvvv2.....2vvvvv..3cxxxx
xxxcc....vvvvv...vvvvv....ccxxxx
xxxxcc3....vvvv1vvvv....3ccxxxxx
xxxxxcc.................ccxxxxxx
xxxxxxccc3...1...1...3cccxxxxxxx
xxxxxxxxccc.........cccxxxxxxxxx
xxxxxxxxxxccccc@cccccxxxxxxxxxxx
ENDMAP

# Before transforms: 32x$, 27x*, 29x|, 4x1, 13x2, 10x3, 6x4, 9x5, 4x6, 2x7
#
NAME:    minmay_elf_hall_hex
TAGS:    nolayout_halls
PLACE:   Elf:$
ORIENT:  northwest
: elf_setup(_G)
: elf_monsters(_G)
SUBST:   1=11., 2=22., 3=33., 4=44., 5=543, 6=66., 7=77.
SHUFFLE: 12, 34, 67
: elf_loot_defenders(_G)
SUBST:   v = v .:2
SUBST:   v : xvb
: elf_loot_randomisation(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxcccxxxxxxxxxxcccxxxxxxxxxxcccxxxxxx
xxxxccc*cccxxxxxxccc.cccxxxxxxccc$cccxxxx
xxxcc*****ccxxxxcc.....ccxxxxcc|$|$|ccxxx
xccc**ccc$|cccccc....5..cccccc|$ccc$|cccx
xc***ccccc$|$c.............c$|$ccccc$|$cx
xc*ccccccccc|c.............c|ccccccccc|cx
xc*ccccccccc$c..........2..c$ccccccccc$cx
xc*|ccccccc$|+.....2U......+|$ccccccc||cx
xc*ccccccccc$c.............c$ccccccccc$cx
xc*ccccccccc|c..5.......3..c|ccccccccc|cx
xc***ccccc$|$cccc.......cccc$|$ccccc$|$cx
xccc**ccc$|ccc..cc..4..cc5.ccc|$ccc$|cccx
xxxcc*****cc.....ccc.ccc....2cc|$|$|ccxxx
xxxxccc*ccc....3.....7........ccc$cccxxxx
xxxxxxccc........6..............cccxxxxxx
xxxxxxxc.4.............2.........cxxxxxxx
xxxxxxxc......2..............3...cxxxxxxx
xxxxxxxc..........4.........2....cxxxxxxx
xxxxxxxc...5......v...v..........cxxxxxxx
xxxxxxxc.......3vvv...vvv3...6...cxxxxxxx
xxxxxxxc.......vvvv...vvvv......4cxxxxxxx
xxxxxxxc...3.vvvv.......vvvv3....cxxxxxxx
xxxxxxxc...vvvvv.........vvvvv...cxxxxxxx
xxxxxxxc...vvv.............vvv...cxxxxxxx
xxxxxxxc..........1...12.........cxxxxxxx
xxxxxxcc..6......................ccxxxxxx
xxxxccc...........................cccxxxx
xxxcc.......2...1ccc.ccc1...........ccxxx
xccc............cc.....cc...3...2....cccx
xc...2....4..3ccc.......ccc............cx
xc...........cc...........cc.....5..2..cx
xc.....v.....cc...........cc...4.v.....cx
xc..5.vvv....cc...........cc....vvv....cx
xc.....v.....cc...........cc.....v.5...cx
xc3..7.....5.cc...........cc...........cx
xc...........cc...........cc...2....6..cx
xccc...2...cccccc.......cccccc...5...cccx
xxxcc.....ccxxxxcc.....ccxxxxcc.....ccxxx
xxxxccc.cccxxxxxxcc.c.ccxxxxxxccc.cccxxxx
xxxxxxcccxxxxxxxxcc...ccxxxxxxxxcccxxxxxx
xxxxxxxxxxxxxxxxxc@...@cxxxxxxxxxxxxxxxxx
ENDMAP

# Before transforms: 26x$, 24x*, 24x|, 5x1, 3x2, 8x3, 4x4, 7x5, 2x6, 2x7
NAME:    minmay_elf_hall_dome
TAGS:    nolayout_halls
PLACE:   Elf:$
ORIENT:  northwest
: elf_setup(_G)
: elf_monsters(_G)
SUBST:   1=11., 2=22., 3=33., 4=44., 5=543, 6=66., 7=77.
SHUFFLE: 12, 34, 67
: elf_loot_defenders(_G)
: elf_loot_randomisation(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xccccccccccccccccccccccccccccccx
xccccccccccc4....5..cccccccccccx
xcccccccc..............ccccccccx
xcccccc......1....3......ccccccx
xccccc...............5....cccccx
xcccc....2....bbbb3........ccccx
xcccc..2.....bbbbbb........ccccx
xccc4.......bbbbbbbb........cccx
xccc........bbbbbbbb3..1....cccx
xccc..5.U..2bbbbbbbb...U....cccx
xcc.........bbbbbbbb.1.......ccx
xcc....1.....bbbbbb..........ccx
xcc.......3..3bbbb.....4.....ccx
xcc.........................5ccx
xc5...............5...........cx
xc.c3..c..5c...1....c...c...c.cx
xc.cc..cc..cc......cc..cc..cc3cx
xc.ccc6ccc6ccc....ccc7ccc7ccc.cx
xc+cccccccccccc..cccccccccccc+cx
xc$**cc*$cc*$cc..cc$|cc$|cc||$cx
xc*$*$***$*$**c.4c||$|$|$|||$|cx
xc**$*$***$*$*c3.c|||$|||$|$||cx
xcc**cc$*cc$*cc..cc|$cc|$cc|$ccx
xcccccccccccccc@@ccccccccccccccx
ENDMAP

# Before transforms: 32x$, 27x*, 27x|, 4x1, 8x2, 9x3, 2x4, 10x5, 2x6, 2x7
NAME:    minmay_elf_hall_spiked
TAGS:    nolayout_halls
PLACE:   Elf:$
ORIENT:  northwest
: elf_setup(_G)
: elf_monsters(_G)
SUBST:   1=11., 2=22., 3=33., 4=44., 5=543, 6=66., 7=77.
SHUFFLE: 12, 34, 67
SUBST:   b : bn....
SUBST:   v = v .:2
SUBST:   v : xvb
: elf_loot_defenders(_G)
: elf_loot_randomisation(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxccccxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxcccc*|ccccxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxccc|$|$**|$cccxxxxxxxxxxxxxx
xxxxxxxxxxxxxcc$|$||*$*$|$*ccxxxxxxxxxxxxx
xxxxxxxxxxxxxc$|$|**$*$|$|$*cxxxxxxxxxxxxx
xccccxxxxxxxxc+cccccccccccc+cxxxxxxxxccccx
xc..cccxxxxccc..............cccxxxxccc2.cx
xc3...cccccc...6...2..........cccccc....cx
xcc.U.5.cc..........2..2.....6..cc...U.ccx
xxc.........4..............3...........cxx
xxcc....2.......U........U....5.......ccxx
xxxc7........3........5............2..cxxx
xxxcc...bb.....vvv.3....vvv.....bb...ccxxx
xxxcc...bb..5...vvvv..vvvv......bb1..ccxxx
xxxc..............vvvvvv..............cxxx
xxcc3.....5.........vv......4....3....ccxx
xxc..........................1.......5.cxx
xcc1....cc............3.........cc7....ccx
xc...1cccccc3....2.c..c.......cccccc....cx
xc5.ccc$*$*ccc....cc..cc...5ccc|*||ccc2.cx
xc+cc*$*$*$$*ccccccc.5ccccccc*|*$|$|$cc+cx
xc*$*$*$*$|$*cxxxxxc3.cxxxxxc*|$|$|$|$|$cx
xcccccc*$*|cccxxxxxc5.cxxxxxccc|$|$ccccccx
xxxxxxccccccxxxxxxxc..cxxxxxxxccccccxxxxxx
xxxxxxxxxxxxxxxxxxxc@@cxxxxxxxxxxxxxxxxxxx
ENDMAP

# Before transforms: 20x$, 31x*, 28x|, 8x1, 4x2, 8x3, 4x4, 8x5, 4x6, 2x7
NAME:    minmay_elf_hall_quartered_circle
TAGS:    nolayout_halls
PLACE:   Elf:$
ORIENT:  northwest
: elf_setup(_G)
: elf_monsters(_G)
SUBST:   1=11., 2=22., 3=33., 4=44., 5=543, 6=66., 7=77.
SHUFFLE: 12, 34, 67
: elf_loot_defenders(_G)
: elf_loot_randomisation(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxcccccccccccxxxxxxxxxxx
xxxxxxxxxccc*|*|+...1cccxxxxxxxxx
xxxxxxxccc*$|*||c.....6cccxxxxxxx
xxxxxxcc$*|*|cccc........ccxxxxxx
xxxxxcc*|$|ccc*|c....3....ccxxxxx
xxxxcc|$*ccc|$*$+......5...ccxxxx
xxxcc$||cc*$*|$*c..6........ccxxx
xxxc|$$cc*$**cccc............cxxx
xxcc$*cc$**ccc1....3...U.....ccxx
xxc$||c*|$cc.................2cxx
xcc*|cc**cc...5bbb7.......4...ccx
xc$|*c|**c..1bbbbbbb..........2cx
xc|$cc*|cc..bbbbbbbbb..4.......cx
xc*|c|**c..6bbbbbbbbb..........cc
xc|*c$$|c..bbbbbbbbbbb..........@
xc+ccc+cc6.bbbbbbbbbbb...1..3cc..
xc..1......bbbbbbbbbbb......2cccc
xc..........bbbbbbbbb.......ccxxx
xc.7..5....4bbbbbbbbb.......cxxxx
xc...........bbbbbbb...5...1cxxxx
xcc.5.........5bbb..3.......cxxxx
xxc........2.............1.ccxxxx
xxcc..3..U...........5....ccxxxxx
xxxc........4.............cxxxxxx
xxxcc.............5......ccxxxxxx
xxxxcc.................cccxxxxxxx
xxxxxcc......1........ccxxxxxxxxx
xxxxxxcc3........3cccccxxxxxxxxxx
xxxxxxxccc......cccxxxxxxxxxxxxxx
xxxxxxxxxccc3...ccxxxxxxxxxxxxxxx
xxxxxxxxxxxcccc..cxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxc@.cxxxxxxxxxxxxxxx
ENDMAP

# The elves had created golems to guard their treasure.
# Then those turned out to be too much, so we're using turbines instead.
# Before transforms: 39x$, 26x*, 26x|, 6x1, 8x2, 4x3, 10x4, 6x5, 2x6, 2x7, 16x8
NAME:    minmay_elf_hall_golems
TAGS:    nolayout_halls
PLACE:   Elf:$
ORIENT:  northwest
WEIGHT:  5
: elf_setup(_G)
: elf_monsters(_G)
KMONS:   8 = thermic dynamo
SUBST:   1=11., 2=22., 3=33., 4=44., 5=543, 6=66., 7=77.
NSUBST:  8 = 1:8 / 2:. / * = 8.
SHUFFLE: 12, 34, 67
SUBST:   b : bc
: elf_loot_defenders(_G)
: elf_loot_randomisation(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxcccccccccccccccccccccccccxxxxx
xxxxxc$*|$$$|*$$*$$*$|$|$|$*$cxxxxx
xxxxcc+cc|*$$*$$$$|$$$|$*$cc+ccxxxx
xxxcc..8ccccccccccccccccccc8..ccxxx
xccc.2......4.......6......4...cccx
xc$+....3.............1......2.+$cx
xc*c8..4.......2..4.....1.....8c*cx
xc|cc5....................2..4cc*cx
xc$$cccc......5.......7...5cccc$|cx
xc*|$*|cc..2.......2......cc|*||$cx
xc|*$|$*c.........2.....5.c*$$|**cx
xc*|**|cc.....1...........cc$|*|$cx
xc$*cccc........1....3.....cccc||cx
xc$cc4.....bb1........bb.4....cc*cx
xc|c......3bbbbb...3bbbb.......c|cx
xc*+....2....bbbb7bbbb....2....+$cx
xccc8..........bbbbb..........8cccx
xxxcc4.......4...b.....6.....3ccxxx
xxxxcccc1..4..............5ccccxxxx
xxxxxxxcccc.........1...ccccxxxxxxx
xxxxxxxxxxccc5........cccxxxxxxxxxx
xxxxxxxxxxxxccc....4cccxxxxxxxxxxxx
xxxxxxxxxxcccccc.c.ccccccxxxxxxxxxx
xxxxxxxxxxc....c...c....cxxxxxxxxxx
xxxxxxxxxxc.............cxxxxxxxxxx
xxxxxxxxxxcc..c88.88c..ccxxxxxxxxxx
xxxxxxxxxxc.@.ccccccc.@.cxxxxxxxxxx
ENDMAP

# Before transforms: 28x$, 27x*, 29x|, 4x1, 9x2, 8x3, 6x4, 8x5, 2x6, 2x7
NAME:    minmay_elf_hall_x
TAGS:    nolayout_halls
PLACE:   Elf:$
ORIENT:  northwest
: elf_setup(_G)
: elf_monsters(_G)
SUBST:   1=11., 2=22., 3=33., 4=44., 5=543, 6=66., 7=77.
SHUFFLE: 12, 34, 67
: elf_loot_defenders(_G)
: elf_loot_randomisation(_G)
SUBST:   n : nnnb
MAP
xxxxxxxxxxxxxxxxxxxxxxx
xxccccccccccccccccccccx
xcc||*$**cc||$|*$|*|ccx
xc*|*|$|**cc$|$*$||$|cx
xc$$|$*cc+ccc*$|$*$|*cx
xc||$|cc2.54cc*$|$*||cx
xc$*|cc...U..+*$*|*$*cx
xc|$cc.......ccc$*|*$cx
xc*cc3...1..cc4cc$$*$cx
xccc...1...cc3.2cc|*$cx
xcc.......cc.....cc$*cx
cc...n...cc...n...cc|cx
c...nnn..3...nnn..6cccx
cc...n..6.....n...ccxxx
xcc..2....1....2.ccxxxx
xxcc............ccxxxxx
xxxcc4...2..3..ccxxxxxx
xxxxcc........ccxxxxxxx
xxxcc..3..5....ccxxxxxx
xxcc5........1..ccxxxxx
xcc2....4......5.ccxxxx
cc...n2...3...n.2.ccxxx
c7..nnn......nnn..4cxxx
cc...n...5....n...ccxxx
xcc.....c..c4....ccxxxx
xxcc5.3cc.2cc...ccxxxxx
xxxcc3ccc..ccc7ccxxxxxx
xxxxcccxc.5cxcccxxxxxxx
xxxxxxxxc5.cxxxxxxxxxxx
xxxxxxxxx@@xxxxxxxxxxxx
ENDMAP

# Before transforms: 18x$, 23x*, 31x|, 6x1, 8x2, 7x3, 10x4, 11x5, 2x6, 4x7
NAME:    minmay_elf_hall_four_x
TAGS:    nolayout_halls
PLACE:   Elf:$
ORIENT:  northwest
: elf_setup(_G)
: elf_monsters(_G)
SUBST:   1=11., 2=22., 3=33., 4=44., 5=543, 6=66., 7=77.
SHUFFLE: 12, 34, 67
: elf_loot_defenders(_G)
: elf_loot_randomisation(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxcccccccccccccccccccccccccccccxxxx
xxxxc$||*$|$$|*$+c2c+*$|*$$$|*||cxxxx
xxxccc|$|*$*|*|cc4..cc*|*|**|$*cccxxx
xxcc.cc|*||*|$cc...3.cc*|$|||*cc4ccxx
xcc...cc||*||cc.......cc*||$|cc...ccx
xc..5..cc*$$cc..6...5..cc*|*cc.....cx
xcc.....cc*cc...........cc$cc.7...ccx
xxcc7....ccc5.....b.....2ccc.....ccxx
xxxcc4....c......bbb.1....c....4ccxxx
xxxxcc.3.....4..bbbbb..........ccxxxx
xxxxxcc...2......bbb...5...3..ccxxxxx
xxxxxxcc..........b..........ccxxxxxx
xxxxxcc....5....4.........7...ccxxxxx
xxxxcc.2...b.........2...b.....ccxxxx
xxxcc.....bbb...........bbb.....ccxxx
xxxc..5..bbbbb.3..6.2..bbbbb...1.cxxx
xxxcc.....bbb...........bbb...5.ccxxx
xxxxcc.1...b..........3..b.....ccxxxx
xxxxxcc......7................ccxxxxx
xxxxxxcc..........b...4......ccxxxxxx
xxxxxcc..4....1..bbb.......5..ccxxxxx
xxxxcc..........bbbbb..........ccxxxx
xxxcc3....c......bbb......c.....ccxxx
xxcc.....ccc......b...2..ccc.1...ccxx
xcc.....ccccc.5.........ccccc...5.ccx
xc..5..ccccccc......4..ccccccc.....cx
xcc...ccc...ccc.......ccc...ccc4..ccx
xxcc1ccc.....ccc.....ccc.....ccc.ccxx
xxxcccc...c...ccc3..ccc...c...ccccxxx
xxxxcc...ccc...ccc.ccc...ccc...ccxxxx
xxxcc...ccxcc...c...c...ccxcc...ccxxx
xxcc...ccxxxcc....c....ccxxxcc...ccxx
xxc.@.ccxxxxxcccccccccccxxxxxcc.@.cxx
ENDMAP

# Before transform: 31x$, 26x*, 31x|, 4x1, 12x2, 12x3, 8x4, 8x5, 2x6, 2x7
NAME:   grunt_elf_hall_spiral
PLACE:  Elf:$
ORIENT: centre
: elf_setup(_G)
: elf_monsters(_G)
SUBST:   1=1., 2=2., 3=3., 4=4., 5=5.
SHUFFLE: 23, 45, 67
: elf_loot_defenders(_G)
: elf_loot_randomisation(_G)
MAP
          xxxxc@cxxxxx
        xxxcccc.cccccxxx
      xxxccc........cccxxx
     xxccc............cccxx
    xxcc.....3.....2....ccxx
   xxcc....2.....5...3...ccxx
  xxcc.......bbb..........ccxx
  xcc....3..bbb4..1........ccx
 xxc.......bb$+..U..4.2.....cxx
 xcc....2.bb*|b57.......3...ccx
xxc..2....b|$$bbbbbbbbb......cxx
xcc.....4.b$|*bb|*$|$|bb..2..ccx
xc..3.....b|*bbb+bb*|$*bb.....cc
cc.....1..b$bb|*$|bb*$|$bb.3...c
c....5..U.b*b*$|*$|bbbb+bb....c@
@c.......6b|+$|*$|*bbb5.4b......
......b4.5bbb|*$|*$+|b6.......c@
@c....bb+bbbb*$|*|$b*b.U..5....c
c...3.bb$|$*bb$*|$bb$b..1.....cc
cc.....bb*$|*bb+bbb*|b.....3..cx
xcc..2..bb|$|$*|bb*|$b.4.....ccx
xxc......bbbbbbbbb$$|b....2..cxx
 xcc...3.......75b|*bb.2....ccx
 xxc.....2.4..U..+$bb.......cxx
  xcc........1..4bbb..3....ccx
  xxcc..........bbb.......ccxx
   xxcc...3...5.....2....ccxx
    xxcc....2.....3.....ccxx
     xxccc............cccxx
      xxxccc........cccxxx
        xxxccccc.ccccxxx
          xxxxxx@xxxxx
ENDMAP

# Before transforms: 26x|, 31x*, 28x$, 8x1, 7x2, 8x3, 7x4, 8x5, 4x6, 4x7
NAME:    nooodl_elf_gasket
TAGS:    nolayout_halls
PLACE:   Elf:$
ORIENT:  northwest
: elf_setup(_G)
: elf_monsters(_G)
SUBST:   1=11., 2=22., 3=33., 4=44., 5=543, 6=66., 7=77.
SHUFFLE: 12, 34, 67
# Shuffle pillars
SHUFFLE: APp / BQq / CRr
NSUBST:  P = 1:+ / *:A
# Fill pillars
SUBST:   p = 1 2 3 4 5 $:35 *:25 |:10
SUBST:   q = B, r = C, Q = B, R = C
SUBST:   A : cvb, B : cvb, C : cvb
# Shuffle inter-circle doors
SHUFFLE: st
SUBST:   s = +, t = c
SUBST:   U = +c
: elf_loot_defenders(_G)
: elf_loot_randomisation(_G)

MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxcccccccccccccxxxxxxxxxxxxx
xxxxxxxxxxxxxxcccccc$|$|$ccccccxxxxxxxxxxx
xxxxxxxxxxxcccccccc.|$|$|.ccccccccxxxxxxxx
xxxxxxxxxccccccccc+.$|*|$.+cccccccccxxxxxx
xxxxxxxxcc.......7c.|$|$|.c7.......ccxxxxx
xxxxxxccc.........cc$|$|$cc.........cccxxx
xxxxxxc.....3.3....ccccccc....1.1.....cxxx
xxxxxcc..............ccc..............ccxx
xxxxcc...............ccc...............ccx
xxxxc...2...BQB...4...c...5...CRC...2...cx
xxxxc......BBqBB......U......CCrCC......cx
xxxcc..2..BBqqqBB..4..U..5..CCrrrCC..2..cc
xxxcc.....QqqqqqQ.....U.....RrrrrrR.....cc
xxxcc.....BBqqqBB.....U.....CCrrrCC.....cc
xxxcc.7....BBqBB....6.U.6....CCrCC....7.cc
xxxcc.......BQB.......c.......CRC.......cc
xxxccc...1.......5...ccc...4.......3...ccc
xxxc$c+....1...5....ccccc....4...3....+c$c
xxxc$$c.............ccccc.............c$$c
xxxc*$ccc...........ccccc...........ccc$*c
xxxc*$$$cc.......cscccccccsc.......cc$$$*c
xxxc**$ccc+ccccccc.6.....6.ccccccc+ccc$**c
xxxc**cc..3ccccc.............ccccc5..cc**c
xxxc*cc.....cccc......3......cccc.....cc*c
xxxc*c.......ccc..3.......3..ccc.......c*c
xxxccc..5.1..cc.4...........4.cc..2.4..ccc
xxxxcc.......t.......APA.......t.......ccx
xxxxccc.....cc......AApAA......cc.....cccx
xxxxxccc...ccc...5.AApppAA.5...ccc...cccxx
xxxxxcccc+cc.c.....PpppppP.....c.cc+ccccxx
xxxxxxcc.....c.....AApppAA.....c.....ccxxx
xxxxxxxc.*|*.c..1...AApAA...1..c.*|*.cxxxx
xxxxxxxcc|*|*c....2..APA..2....c*|*|ccxxxx
xxxxxxxxcc|*|cc...............cc|*|ccxxxxx
xxxxxxxxxccc*|cc.............cc|*cccxxxxxx
xxxxxxxxxxxcc*|c......1......c|*ccxxxxxxxx
xxxxxxxxxxxxcccccc.........ccccccxxxxxxxxx
xxxxxxxxxxxxxxccccc.......cccccxxxxxxxxxxx
xxxxxxxxxxxxxxxxcccccc@ccccccxxxxxxxxxxxxx
ENDMAP

# Before transform: 30x$, 31x*, 26x|, 4x1, 12x2, 12x3, 8x4, 8x5, 2x6, 2x7
NAME:   grunt_elf_hall_branching
TAGS:   nolayout_halls
PLACE:  Elf:$
ORIENT: north
: elf_setup(_G)
: elf_monsters(_G)
SUBST:   1=1., 2=2., 3=3., 4=4., 5=5.
SHUFFLE: 23, 45, 67
: elf_loot_defenders(_G)
: elf_loot_randomisation(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxcccccccccxxxxxxxxxxx
xxxxxxxxxxcc$|*|*|$ccxxxxxxxxxx
xxxxxxxxxxc$|*|*|*|$cxxxxxxxxxx
xxxxxxxxxxc$.|*|*|.$cxxxxxxxxxx
xxxxxxxxxxcc+ccccc+ccxxxxxxxxxx
xxxxxxxxxxc2.3ccc2.3cxxxxxxxxxx
xxxxxxxxxxc...ccc...cxxxxxxxxxx
xxccccccxxc...ccc...cxxccccccxx
xcc|*$$cxxcc.5...4.ccxxc$$*|ccx
cc|*$*.cxxxc...b...cxxxc.*$*|cc
c|*|cc+cxxxcc..b..ccxxxc+cc|*|c
c*$cc3.ccccxc.4b5.cxcccc.2cc$*c
c$*c261.5.cccc...cccc.4.173c*$c
c$.+...4U....c.2.c....U5...+.$c
ccccccc...5..3...3..4...ccccccc
c..............b..............c
@.bbb.2..3..2.bbb.2..2..3.bbb.@
c..............b..............c
ccccccc...4..3...3..5...ccccccc
c$.+...5U....c.2.c....U4...+.$c
c$*c371.4.cccc...cccc.5.162c*$c
c*$cc2.ccccxxc.b.cxxcccc.3cc$*c
c|*|cc+cxxxxxc.b.cxxxxxc+cc|*|c
cc|*$*.cxxxxxc.b.cxxxxxc.*$*|cc
 cc|*$$cxxxxxc...cxxxxxc$$*|cc
  ccccccxxxxxcc@ccxxxxxcccccc
ENDMAP

# Before randomisation: 28x$, 32x*, 27x|, 4x1, 12x2, 12x3, 8x4, 8x5, 2x6, 2x7
NAME:   grunt_elf_hall_diamonds
TAGS:   nolayout_halls
PLACE:  Elf:$
ORIENT: north
: elf_setup(_G)
: elf_monsters(_G)
SUBST:   1=1., 2=2., 3=3., 4=4., 5=5.
SHUFFLE: 23, 45, 67
: elf_loot_defenders(_G)
: elf_loot_randomisation(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxcccxxxxxxxxxxxxxx
xxxxxxcccxxxxcc|ccxxxxcccxxxxxx
xxxxxcc$ccxxcc|*|ccxxcc$ccxxxxx
xxxxcc$..cccc|*|*|cccc..$ccxxxx
xxxcc|*$..cc|*|*|*|cc..$*|ccxxx
xxcc|*|*.5.cc$*|*$cc.5.*|*|ccxx
xcc$*|*b....cc$.$cc....b*|*$ccx
xc$.$*bbb..3.cc+cc.2..bbb*$.$cx
xcc....b....cc...cc....b....ccx
xxcc.4...6.cc.3.2.cc.7...4.ccxx
xxxcc..........5..........ccxxx
xxxccc.2.c.1..2.3..1.c.3.cccxxx
xxcc.cc.cc..b..4..b..cc.cc.ccxx
xcc.3.ccc....bb.bb....ccc.2.ccx
cc.....c...3.bbbbb.2...c.....cc
@...U.....4.5.bbb.5.4.....U...@
cc.....c...2.bbbbb.3...c.....cc
xcc.2.ccc....bb.bb....ccc.3.ccx
xxcc.cc.cc..b..4..b..cc.cc.ccxx
xxxccc.3.c.1..3.2..1.c.2.cccxxx
xxxcc..........5..........ccxxx
xxcc.4...7.cc.....cc.6...4.ccxx
xcc....b....cc...cc....b....ccx
xc$.$*bbb..2.cc.cc.3..bbb*$.$cx
xcc$*|*b....cc...cc....b*|*$ccx
xxcc|*|*.5.cc.....cc.5.*|*|ccxx
xxxcc|*$..cc.2.U.3.cc..$*|ccxxx
xxxxcc$..cccc.....cccc..$ccxxxx
xxxxxcc$ccxxcc...ccxxcc$ccxxxxx
xxxxxxcccxxxxcc@ccxxxxcccxxxxxx
ENDMAP

# Before randomisation: 27x$, 27x*, 28x|, 4x1, 12x2, 12x3, 8x4, 8x5, 2x6, 2x7
NAME:   grunt_elf_hall_asides
TAGS:   nolayout_halls
PLACE:  Elf:$
ORIENT: northeast
: elf_setup(_G)
: elf_monsters(_G)
SUBST:   1=1., 2=2., 3=3., 4=4., 5=5.
SHUFFLE: 23, 45, 67
SHUFFLE: AB, CD, EFGH, IJKL, MNOP
SUBST:   ACEFIJ = ., BDGH = c, KLP = b, MNO = $
: elf_loot_defenders(_G)
: elf_loot_randomisation(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxcccccxxxxxxxxxxx
xxxxxxxxcc|*|ccxxxxxxxxxx
xxxxxxxcc|*|*|ccxxxxxxxxx
xxxxxxccO*|*|*Pccxxxxxxxx
xxxxxccOOO*|*PPPccxxxxxxx
xxxxcc|*OOO*PPP*|ccxxxxxx
xxxxc|*|*OObPP*|*|cxxxxxx
xxxxc*|*|*bbb*|*|*cxxxxxx
xxxxc|*|*MMbNN*|*|cxxxxxx
xxxxcc|*MMM.NNN*|ccxxxxxx
xxxxxccMMM3U2NNNccxxxxxxx
xxxxxxccM.4L5.Nccxxxxxxxx
xxxxxccH2.KbK.3Gccxxxxxxx
xxxxccHH..5L4..GGccxxxxxx
xxxccHH.3..1..2.GGccxxxxx
xxcc...7.HH|GG.6...ccxxxx
xcc.....HHbbbGG.....ccxxx
xc3.5J4.HbbbbbG.5J4.2cxxx
xcU.IbI1|bbbbb|1IbI.Ucxxx
xc2.3J2.EbbbbbF.3J2.3cxxx
xcc.....EEbbbFF.....ccxxx
xxcc...6.EE|FF.7...ccxxxx
xxxccEE.3..1..2.FFccxxxxx
xxxxccEE..4L5..FFccxxxxxx
xxxxxccE..KbK..Fccxxxxxxx
xxxxxxcc..5L4..ccxxxxxxxx
xxxxxcc.2.....3.ccxxxxxxx
xxxxcc...CC.DD...ccxxxxxx
xxxxc.3.CCC2DDD.2.cxxxxxx
xxxxc4.CCC3.5DDD.5cxxxxxx
xxxxc.CCC..4..DDD.cxxxxxx
xxxxccCC...c...DDccxxxxxx
xxxxxcc.3.ccc.2.ccxxxxxxx
xxxxxxcc.AAcBB.ccxxxxxxxx
xxxxxxxccAA.BBccxxxxxxxxx
xxxxxxxxcc...ccxxxxxxxxxx
xxxxxxxxxcc@ccxxxxxxxxxxx
ENDMAP

# Before transforms: 1x$, 27x*, 31x|, 6x1, 8x2, 8x3, 4x4, 8x5, 2x6, 2x7
NAME:    minmay_elf_hall_curves
PLACE:   Elf:$
ORIENT:  northwest
: elf_setup(_G)
: elf_monsters(_G)
SUBST:   1=11., 2=22., 3=33., 4=44., 5=543, 6=66., 7=77.
SHUFFLE: 12, 34, 67
: elf_loot_defenders(_G)
SUBST:   v = v .:2
SUBST:   v : xvb
: elf_loot_randomisation(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxcccccccccccccccxxxxxxxx
xxxxxxcccc........1....ccccxxxxx
xxxxccc....vvv.4.5........cccxxx
xxxcc....vvv2.......1.......ccxx
xxxc..2.vv.....ccccc...v.....cxx
xxcc....v...cccc...c..vvv..3.ccx
xxc.......ccc......c...vvv....cx
xxc2.vv............c....vv....cx
xcc.vv..2.......1..cc...vvv.5.cc
xc..v..c............c..2.vv....c
xc.vv..c....bbbb..3.c....vvv...c
xc.v5.cc...bbbbbb...cc....vvv..c
xc.v..c....bbbbbb....c..3..v...c
xc....c..3.bbbbbb....cc......5.@
xc.5.cc....bbbbbb.....ccc......c
xc...c......bbbb..2.....cccc...@
xc...c................6...7ccccc
xc.1.c......1...4..bbbb..U.+||*c
xc...ccccc........bbbbbb.3.c**|c
xc.......cccc..3..bbbbbb...c|*|c
xc...5.4....ccc...bbbbbb...c**|c
xc....v.....5.cc..bbbbbb.2cc||*c
xcc..vvv.......c.6.bbbb...c||*cc
xxc...vvvv.2...cc.......ccc**|cx
xxc....vvvvv....c.U...4.c$||*|cx
xxcc.....vvvv...c..3.7ccc***|ccx
xxxc..5....vvv..cc+cccc|*||**cxx
xxxcc.......v....c**||**|*|*ccxx
xxxxccc..1....3..c|**|*|||cccxxx
xxxxxxcccc.......c|||*|ccccxxxxx
xxxxxxxxxccccc@c@cccccccxxxxxxxx
ENDMAP

# Before transforms: 42x$, 27x*, 27x|, 10x1, 8x2, 4x3, 4x4, 6x5, 4x6, 2x7
NAME:    minmay_elf_hall_not_hex
PLACE:   Elf:$
ORIENT:  northwest
: elf_setup(_G)
: elf_monsters(_G)
SUBST:   1=11., 2=22., 3=33., 4=44., 5=543, 6=66., 7=77.
SHUFFLE: 12, 34, 67
: elf_loot_defenders(_G)
SUBST:   v = v .:2
SUBST:   v : xvb
: elf_loot_randomisation(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxcccccccccccxxxxxxxxx
xxxxxxxccc$|+..4+|*cccxxxxxxx
xxxxxccc*|*|c2..c*$||cccxxxxx
xxxccc$*|$$cc6..cc|**|*cccxxx
xccc$*|**ccc..v.1ccc$*$*|cccx
xc*|*|*ccc.6.vvv.2.ccc|$*||cx
xc|*$ccc24.vvv.vvv...ccc|**cx
xc+ccc.5....5......1...ccc+cx
xc.2.....bbb.2...bbb5.....6cx
xc6...1.bbbbb...bbbbb..1.3.cx
xc..U...bbbbb.3.bbbbb...U..cx
xc1.....bbbbb...bbbbb..5..7cx
xc.7.1...bbb.....bbb..1..2.cx
xc+ccc..4.....1.....5..ccc+cx
xc$$$ccc..1.....2..1.ccc$$$cx
xc|$*$$ccc....4...5ccc|$$*$cx
xccc|*$|$ccc.2...ccc$*$||cccx
xxxccc|$$$|cc.c.cc$$|$*cccxxx
xxxxxccc$*$$c3.3c$$*$cccxxxxx
xxxxxxxccc$$c...c$$cccxxxxxxx
xxxxxxxxxcccc...ccccxxxxxxxxx
xxxxxxxxxxxxc@c@cxxxxxxxxxxxx
ENDMAP

# Before transforms: 1x$, 44x|, 4x1, 4x2, 4x3, 4x4, 12x5, 4x6, 4x7
NAME:    minmay_elf_hall_statues
TAGS:    nolayout_halls
PLACE:   Elf:$
ORIENT:  northwest
: elf_setup(_G)
: elf_monsters(_G)
SUBST:   1=11., 2=22., 3=33., 4=44., 5=543, 6=66., 7=77.
SHUFFLE: 12, 34
: elf_loot_defenders(_G)
SUBST:   v = v .:2
SUBST:   v : xvb G:1
: elf_loot_randomisation(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxcccccccccccccccxxxxxxxxx
xxxxxxxxxccnnn..........cccccxxxxx
xxxxxxxxxcnnGn.v.v.v3v......cccxxx
xxxxxxxxccnnnn................ccxx
xxxxxxxxcnnnncccc+cccc.....v...cxx
xxxxxxxxcnGncc.......ccc...vv3.ccx
xxxxxxxccnnnn..........ccc..vv..cx
xxxxccccnnnnn.7..v.......cc..v..cx
xxcccnnnnGnnn....vv.1.....cc....cx
xccnnnGnnnnnb+b...vv..v....c....cc
xcnnnnnnnnnbb.bb.4.vv.vv...cc5...c
xcnGnncnnnbb...bb...v..vv...c....c
xcnnncc...+..U.6b..1....vv..cc..5c
xc...c..7.bb....bn.......v...c.G.c
xc.v.c.....bb6...nnbbb.....G1c5..c
xc...c......bbb.G.bb6bbb..1..c...c
xc.v.+..vv....nn.||||||bb....+.G.c
xc.4.c..2vv....nb|||||||b...4c..5c
xc.v.c....vv...bb|||||||bb.G.c...c
xc...c.....vv..b6|||U|||7b...c.G.c
xc.v.cc......2.bb|||||||bb..cc...c
xc....c...vv..3.b|||||$|b...c5...c
xc....cc...vv...bb|||||bb..cc....c
xcc....c....vv...bbb7bbb...c...5.c
xxc....cc....vv....bbb....cc.v...c
xxc..3..cc2.........2....cc..vv..c
xxcc.vv..ccc...G.4.G...ccc....vv.c
xxxc..vv...ccc.......ccc....5..v.c
xxxcc..vv....cccc+cccc.5.vv......c
xxxxcc.........5..........vv.....c
xxxxxccc......G..G..G.....5vv.....
xxxxxxxcccc..5.....5.............@
xxxxxxxxxxccccccccccccccccccccc.@c
ENDMAP

# Before transforms: 36x$, 28x|, 26x*, 4x1, 4x2, 8x3, 8x4, 4x5, 4x6, 4x7
NAME:    minmay_elf_hall_furrowed
TAGS:    nolayout_halls
PLACE:   Elf:$
ORIENT:  northwest
: elf_setup(_G)
: elf_monsters(_G)
SUBST:   1=11., 2=22., 3=33., 4=44., 5=543, 6=66., 7=77.
SHUFFLE: 12, 34, 67
: elf_loot_defenders(_G)
SUBST:   v = v .:2
SUBST:   v : xvb
: elf_loot_randomisation(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxcccccccccxxxxxxxxxxxxx
xxxxxxxxxxcccc|*|*|*|ccccxxxxxxxxxx
xxxxxxxxxxc|*|*|*v*|*|*|cxxxxxxxxxx
xxxxccccccc*|v|*|*|*|v|*cccccccxxxx
xxxxc$|$+3cc*|*cc+cc*|*cc4+$$|cxxxx
xxxxc$v$c.7ccccc4.3ccccc6.c|v$cxxxx
xxxcc*$$c..c.6.c...c.7.c..c*$$ccxxx
xxxc$$|cc2.......5.......1cc$|*cxxx
xxxc$v$c....1v.......v2....c*v$cxxx
xxcc$*$c5.vvvvv..U..vvvvv.5c$$|ccxx
xxc|$|cc..3v2..3...4..1v4..cc$$$cxx
xxc$v*c4.....4..1.2..3.....3c*v$cxx
xcc*$$c..ccc7.ccccccc.6ccc..c$$|ccx
xc$$|cc....cccc3...4cccc....cc$$$cx
xccccc6.....................7cccccx
xxxxxccc1......v.5.v......2cccxxxxx
xxxxxxxcccc.............ccccxxxxxxx
xxxxxxxxxxcccc4.....3ccccxxxxxxxxxx
xxxxxxxxxxxxxcc@ccc@ccxxxxxxxxxxxxx
ENDMAP
