This reverts commit 12ec49f4941b83c362269a7a420d0f709c05a6a6.
3XCKCQRD5AQKE6EH3QIEYHUYA2KDGUHTARIQHJOXDC2SFOASR6UQC
###############################################################################
#
# The Ice Cave (Eino)
#
#
# Ice Cave is aimed to appear at somewhere in the middle game. It should be
# fairly challenging, but also allow retreating. The entries shouldn't be out
# of depth.
#
# Flavour: white colours, ice monsters, appropriate clouds.
# The escape is at the start. The player can back away if s/he decides
# some challenges are too much to handle.
#
###############################################################################
{{
function ice_cave_portal(e)
local desc_long = "A permanent cold front seems to surround this " ..
"portal. Whatever lives on the other side, they will be full of " ..
"grim and arctic fury. You note that the archway is melting away."
local timeout_turns = crawl.random_range(1200, 1700)
local messager =
timed_msg {
visible = true,
-- $F{xxx} will be substituted with the 'entity' property of the timed
-- marker, or with the desc property (if entity is not set).
messages = time_messages(timeout_turns,
"$F{The} is slowly melting away.",
"$F{The} is melting away.",
"$F{The} is quickly melting away.",
"$F{The} is almost completely melted.")
}
e.lua_marker('O',
timed_marker {
disappear = "The archway melts and disappears.",
desc = "A frozen archway",
desc_long = desc_long,
entity = 'archway',
dst = "ice_cave",
dstname_abbrev = "IceCv",
dstorigin = "in an ice cave",
overmap = "frozen archway",
turns = timeout_turns,
floor = "floor",
msg = messager })
e.kfeat("O = enter_portal_vault")
e.colour("O = white")
end
}}
{{
-- Alter short feature descriptions for all ice cave destination vaults.
function ice_cave_feat_descs()
dgn.set_feature_desc_short("rock wall", "ice covered $BASE")
dgn.set_feature_desc_short("gate leading back to the Dungeon",
"ice covered $BASE")
dgn.set_feature_desc_short("empty arch of ancient stone",
"ice choked $BASE")
dgn.set_feature_desc_short("Some shallow water",
"Some ice crusted shallow water")
dgn.set_feature_desc_short("Some deep water",
"Some ice crusted deep water")
dgn.set_feature_desc_long("Some deep water",
"It looks freezing!");
end
dgn.set_lt_callback("ice_cave", "ice_cave_feat_descs")
}}
# For destination (not entry) vaults, use the following line after all
# substitutions have been performed:
# : ice_cave_colours(_G)
{{
function ice_cave_colours(e)
e.kfeat("< = exit_portal_vault")
e.colour("< = white")
e.lrockcol("white")
e.lfloorcol("blue")
e.lrocktile("wall_ice")
e.lfloortile("floor_ice")
end
}}
# Using this function will turn any ! glyph on the map into a fog generator.
# Any use requires two parameters as follows:
# : place_fog(_G, "freezing vapour", 25)
{{
function place_fog(e, type, strength)
e.lua_marker("!", fog_machine { pow_max = strength, cloud_type = type,
delay_min = 50, delay_max = 300, size = 12,
start_clouds = 1 } )
end
}}
# Monster set functions
# Some random monster lists are the same for multiple destination caves.
# : ice_cave_random_monster_list_natural_giant(_G)
{{
function ice_cave_random_monster_list_natural_giant(e)
e.set_random_mon_list("wolf w:35 / yak w:35 / polar bear w:15 / death yak / \
frost giant w:5")
end
}}
# : ice_cave_random_monster_list_undead_demon(_G)
{{
function ice_cave_random_monster_list_undead_demon(e)
e.set_random_mon_list("white imp w:20 / ufetubus w:20 / freezing wraith / \
wolf simulacrum / yak simulacrum / \
polar bear simulacrum / human simulacrum / \
elf simulacrum / orc simulacrum / \
draconian simulacrum / ogre simulacrum / \
centaur simulacrum / troll simulacrum / \
naga simulacrum / blue devil / ice devil / \
ice fiend w:5")
end
}}
# : ice_cave_random_monster_list_undead_necromancer(_G)
{{
function ice_cave_random_monster_list_undead_necromancer(e)
e.set_random_mon_list("white imp w:20 / ufetubus w:20 / freezing wraith / \
wolf simulacrum / yak simulacrum / \
polar bear simulacrum / human simulacrum / \
elf simulacrum / orc simulacrum / \
draconian simulacrum / ogre simulacrum / \
centaur simulacrum / troll simulacrum / \
naga simulacrum / necromancer")
end
}}
# Currently, all the "caverns" maps use the same monster sets for placement.
# : ice_cave_caverns_undead_demon_monster_set(_G)
{{
function ice_cave_caverns_undead_demon_monster_set(e)
e.mons("white imp w:5 / ufetubus w:5 / human simulacrum w:2 / \
elf simulacrum w:2 / orc simulacrum w:2")
e.mons("polar bear simulacrum / freezing wraith w:3 / nothing w:1")
e.mons("ice statue")
e.mons("ice devil")
e.mons("draconian simulacrum / ogre simulacrum / centaur simulacrum / \
naga simulacrum / troll simulacrum")
e.mons("freezing wraith / blue devil")
e.mons("patrolling ice fiend")
end
}}
# : ice_cave_caverns_natural_giant_monster_set(_G)
{{
function ice_cave_caverns_natural_giant_monster_set(e)
e.mons("wolf / yak w:3 / nothing w:1")
e.mons("polar bear / nothing w:5")
e.mons("ice statue")
e.mons("polar bear / death yak w:5")
e.mons("polar bear / yak")
e.mons("wolf")
e.mons("patrolling frost giant")
end
}}
# Add a milestone for entering the Ice Cave.
{{
function ice_cave_milestone(e)
crawl.mark_milestone("br.enter", "entered an Ice Cave.")
end
}}
# Entries ##########################################
NAME: portal_ice_cave_entry_animals_and_master
TAGS: uniq_ice_cave
DEPTH: D:16-20, Lair:6-
ORIENT: float
: ice_cave_portal(_G)
COLOUR: X = white
KFEAT: X = x
MONS: wolf / yak w:5 / nothing w:1
MONS: yak / polar bear w:5 / nothing w:1
MONS: polar bear / nothing w:2
MONS: ice dragon w:8 / nothing w:2
MAP
xxxxxxx
xxXXXXXxx
xXX.4.XXx
xX.3.3.Xx
xX..O..Xx
xX.2.2.Xx
xXX...XXx
xxXX.1.Xx
xX11XXXx
xXX.XXxx
xXX.XXx
xxXX.Xx
xxXX.XXx
xXX@XXxx
ENDMAP
NAME: portal_ice_cave_entry_horrid_things
TAGS: uniq_ice_cave
DEPTH: D:14-20, Elf:2-6
ORIENT: float
: ice_cave_portal(_G)
COLOUR: X = white
KFEAT: X = x
MONS: ice beast / freezing wraith w:2 / nothing w:2
MONS: freezing wraith / nothing w:3
MONS: azure jelly w:3 / freezing wraith w:7
MAP
xxxxxxxxxxxxxxxxxxxxxxxx
xxXXXXXxXXXXXXXXXXxxxxxx
xXX...XXX........XXxxxxx
xX.....X....2..1..XXXXXX
xX..O..+..3..1..1......+
xX.....X....2..1..XXXXXX
xXX...XXX........XXxxxxx
xxXXXXXxXXXXXXXXXXxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP
NAME: portal_ice_cave_demonic_guard
TAGS: uniq_ice_cave
DEPTH: D:14-20, Elf:2-6
ORIENT: float
: ice_cave_portal(_G)
COLOUR: x = white
MONS: ice devil
MAP
xxxxxxx
x..O..x
x.....x
x.1.1.x
x.....x
xxx.xxx
xxx.xxx
xxx.xxx
xxx.xxx
xxx+xxx
ENDMAP
NAME: portal_ice_cave_entry_ice_statue_001
TAGS: uniq_ice_cave
DEPTH: D:14-20, Elf:2-6, Vault:1-7
ORIENT: float
: ice_cave_portal(_G)
COLOUR: x = white
MONS: ice statue
MAP
xxxxxxx
x.....x
x..O..x
x.....x
x..1..x
x.....x
x.....x
xxx+xxx
ENDMAP
NAME: portal_ice_cave_entry_ice_statue_002
TAGS: uniq_ice_cave
DEPTH: D:14-20, Elf:2-6, Vault:1-7
ORIENT: float
: ice_cave_portal(_G)
MONS: ice statue
MAP
.....
.........
...........
.....1.....
.....O.....
.....1.....
...........
.........
.....
ENDMAP
# The destination vaults ############
#
# Currently, there are five cave vaults (each of weight 6) and three
# cavern vaults (each of weight 5).
############################################################################
# small caves
#
# All have the starting point next to the exit, so you can always retreat;
# a middle point/area where there is some loot; and the end, where there is a
# bigger challenge and some major loot. Ideally weaker characters attempt
# to overcome the midpoint and then go back to dungeon, and strong characters
# can try to clear the whole cave.
# Foes: animals + frost giant & an ice statue.
# Loot: heavy weapons and rC gear wearable by big races,
# plus some useful potions in the freezer.
NAME: ice_cave_small_01
TAGS: ice_cave no_item_gen no_monster_gen no_pool_fixup
ORIENT: encompass
WEIGHT: 6
# Randomize the layout slightly.
SHUFFLE: "'
SUBST: "=. , ':x .:1
: ice_cave_colours(_G)
: ice_cave_random_monster_list_natural_giant(_G)
: ice_cave_milestone(_G)
MONS: yak / wolf / polar bear w:4
MONS: polar bear
MONS: frost giant
MONS: polar bear w:3 generate_awake / wolf generate_awake / \
yak generate_awake
MONS: ice statue
SHUFFLE: defg
ITEM: giant club / giant spiked club / great mace w:9 / \
battleaxe w:7 / glaive w:8 / halberd w:8 / great sword w:6 / \
nothing w:58
ITEM: great mace good_item / battleaxe good_item / glaive good_item / \
halberd good_item / great sword good_item / nothing w:50
ITEM: battleaxe ego:freezing / glaive ego:freezing / halberd ego:freezing / \
great sword ego:freezing / battleaxe ego:freezing good_item / \
glaive ego:freezing good_item / halberd ego:freezing good_item / \
great sword ego:freezing good_item / nothing w:80
ITEM: cap ego:cold_resistance w:9 / cap ego:resistance w:1 / \
cloak ego:cold_resistance w:9 / cloak ego:resistance w:1 / \
shield ego:cold_resistance w:9 / shield ego:protection w:1 / \
large shield ego:cold_resistance w:5 / \
animal skin ego:cold_resistance / nothing w:60
ITEM: potion of resistance w:5 / potion of gain strength / \
potion of might / potion of confusion / potion of levitation / \
potion of experience w:2
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx..xxxxxxxxxx12....xxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx...xx...xxxx...2xxx...xxxxxxxxxxxxx
xxxxxxxxxx......1..xxxxx..x212.xxxxxxx...1xxxxxxxxxx
xxxxxxx.......1..1.xxxxxx....xxxxxxxxxxxx21..xxxxxxx
xxxxxx...xxxx.3.1....xxxxxxxxxxxxxwwwxxxxxx....xxxxx
xxxx...xxxfgxx.1..1...xxxxxxxxxxwwwwwxxxxxxxx....xxx
xxx...xxdegefxx..1.....xxxxxwwwwwwwwwwwwwxxxxxx....x
xxx...x$$$$gdex.......xxxxxwwwwwwwwwwwwwwwwwxxxxx..x
xxx...x....$$xx.....xxxxwwwwxxwwwwwwwwwwwwxxxxxx11xx
xxxx.......xxx.....xxwwwwxxxxxxxxxwwwwwwxxxxx...2xxx
xxxxx............xxxwwwwxxxxxxxxxxxwwwxxxx......xxxx
xxxx"xx.........x'wwwwwxxxxxxxxxxxxwxxxx...xxxxxxxxx
xxwwxxxxxxxxxxxxxxwwwxxxxxxxxxxxxxxxxxx..xxxxxxxxxxx
xxxwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxx..xxxxxxxxxxxx
xxwwwwwwwwwwwwwwwwwx'xxxxxxxxxxxxxxx5...xxxxxxxxxxxx
xxwwwxxxxxxxxxxwwxx'x'xxxxxxxxxxxxx.......xxxxxxxxxx
xxwwxxxxxxxxxxxwwxxx'xxxxxxxxxxxxxxxx.......xxxxxxxx
x"xxxxxxxxxxxxxxwxx'xxxxxx"xxxxxxxxxxx....2...xxxxxx
xx"xxxxxxxxxxxxxxx'xxxxxxx""""x..xxxxxxx2......xxxxx
xxx"xxxxxxxxxxxxx'xxxxxxx"xxxx.......xxx.......xxxxx
xxx"xxxxxxxxxxxxx''xxxxx"xxx''xx......21x.....xxxxxx
xxxx""xxxxxxxxxxxxx'xxx"xxx'xxxxx....1..2....xxxxxxx
xxxxxx""""xxxxxxxxxx'xx"xxx'xxwwxx.1......1.xxxxxxxx
xxxxxxxxxx"xxxxxxxxx'xxx"xxx'xxwwxx.x....x.xxxxxxxxx
xxxxxxxxx"xxxxxxxxx'xxx"xxxxx'xxwwxxxx..xxxxxxxxxxxx
xxxxxxx""xxxxxxxxx'xxx"xxxxxx'xxxwwxxx..xxxwwxxxxxxx
xxxxxx"xxxxxxxxxxx''xxx"xxxxxx'xxwwxx..xxxwwxxxxxxxx
xxxxx"xxxxxxxxxxxxx'xxxx""xxxx'xxwxx..xxxwwxxxxxxxxx
xxxx"xxxxxxxxxxxxxxx'xxxx"xxx'xxxwwx...xxwwxxxxxxxxx
xxx"xxxxxxxxxxxxxxxxx'xxxx"x'xxxxwwxx...xxwwxxxxxxxx
xxx"xxxxxxxxxxxxxxxxx'xxxxx2xxxxxwwxxx44.xwwxxxxxxxx
xxx"xxxxxxxxxxxxxxxxx'x..x.xxxxxwwxxxx4.4xxwwxxxxxxx
xx"xxxxxxxxxxxxxxxxxxx.hx.xxxxxxwwxxx...xxxwwxxxxxxx
xx"xxxxxxxxxxxxxxxx.1xhxhx.xxxxwwwxxx...xxxwwwxxxxxx
x"xxxxxxxxxxxxxxxxx.xhxhxh.xxxwwwxxx.....xxxwwxxxxxx
xx"xxxxxxxxx"xxxxxxx1.....xxxxxwwxx...A...xxxwxxxxxx
xxx"""xxx"""x""xxx""xxxxxxxxxxxwwxx.......xxwwxxxxxx
xxxxxx"""xxxxxx"""xxxxxxxxxxxxxwwxxx..<..xxxwwxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwxxxx...xxxwwwxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP
# Foes: ice beasts, ice dragons & ice statues.
# Loot: some gold, jewellery (approximately three rings).
NAME: ice_cave_small_02
TAGS: ice_cave no_item_gen no_monster_gen no_pool_fixup
ORIENT: encompass
WEIGHT: 6
# Randomize the layout slightly.
SHUFFLE: "'
SUBST: "=. , ':x .:1
: ice_cave_colours(_G)
: dgn.set_random_mon_list("ice beast w:90 / ice dragon / nothing")
: ice_cave_milestone(_G)
MONS: ice beast
MONS: ice dragon
MONS: ice beast generate_awake
MONS: ice statue
ITEM: any jewellery / gold w:15 / nothing w:5
ITEM: any jewellery good_item / gold w:5 / nothing w:5
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxx......xxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxx.....xxx....xxxxxx
xxxxxxxxxxxxxxxxxxxxxx..xxxxxxx...2..xxxx
xxxxwwwxxxxxxxxxxxxxxxxx.xxxx$$.2....dexx
xxwwwwwxxxxxxxxxxxxxx..xx.xx$$$$....deddx
xwwwwwwwwwwxxxxxxxxx.xx..xx$$$$$$..deddxx
xxxwwwwwwwwwwwxxxxx..xxxxxxxx$$$$$$$xxx'x
xwwwwwwwwwwwxxxxxx11xxxxwwwxxxxxxxxxxwx'x
xxxxwwwwwwxxxxx...1xxwwwwwwwwwwwwwwwwwwxx
xxxxxwwwxxxx......xxwwwwwwwwwwwwwwwwwwwxx
xxxxxwxxxx...xxxxxxxxxxxxxxxxxxxwwwwwwxxx
xxxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxxxx'xxxx
xxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxxxx.xxxxx
xxxxxx....xxxxxxxxxxxxxxxxxxx"""x..$$xxxx
xxxx........xxxxxxxx""xxxxx""xxx.xxx$xxxx
xxx...........xxxxx"xx""x""xxxxxx'xxx"xxx
xx..............x""xxxxx"xxxxxxxxx'xxx"xx
x................xxxxxxxxxxxxxxxxxx'xx"xx
x.................xxxxxxxxxxxxxxxxxx'xx"x
xx...1.111.1....xx'xxxxxxxxxxxxxxxxx'xx"x
xxx...1.1.1.....xxx'xxx''xxxxx''x'x'xx"xx
xwxx..........xxxxxx'''xx'xxx'xx'x'xx"xxx
xwwxx4x....x4xxxxxxxxxxxxx''$xxxxxxx"xxxx
xxwwxxxx..xxxxxxxxxxxxxxxxx$$$xxxx""xxxxx
xxxwwxxx..xxxxxxxxxxxxxx"xx$$$$xx"xxxxxxx
xxxwwxx..xxxxxxxxxxxxxx"x""x$$"xxx"xxxxxx
xxxwxx..xxxxxxxxxxxxxxx"xxxxxxx"x"xxxxxxx
xxxwwx...x""x"xxxxxxxxxx"xxxxxxx"xxxxxxxx
xxxwwxx...xx"x""xxxxxxxxx"xxxxxxxxxxxxxxx
xxxwwxxx33.xxxxx""xxxxx""xxxxxxxxxxxxxxxx
xxwwxxxx3.3xxxxxxx"""x"xxxxxxxxxxxxxxxxxx
xxwwxxx...xxxxxxxxxxx"xxxxxxxxxxxxxxxxxxx
xxxxxxx...xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xwwxxx.....xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xwwxx...A...xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xwwxx.......xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xwwxxx..<..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xwwxxxx...xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP
# Foes: mostly in the undead vein, plus a necromancer and an ice statue.
# Loot: ice magic loot, gear of cold resistance (one piece).
NAME: ice_cave_small_03
TAGS: ice_cave no_item_gen no_monster_gen no_pool_fixup
ORIENT: encompass
WEIGHT: 6
KFEAT: _ = altar_kikubaaqudgha
SUBST: - = ........-
KFEAT: - = alarm trap
: ice_cave_colours(_G)
: ice_cave_random_monster_list_undead_necromancer(_G)
: ice_cave_milestone(_G)
MONS: ice beast
MONS: white imp
MONS: freezing wraith
MONS: human simulacrum / elf simulacrum / orc simulacrum / \
draconian simulacrum w:5 / ogre simulacrum w:5 / \
centaur simulacrum w:5 / troll simulacrum w:5 / naga simulacrum w:5
MONS: necromancer / necromancer ; robe ego:cold_resistance / \
necromancer ; robe ego:cold_resistance . wand of fire / \
necromancer ; robe ego:cold_resistance . wand of fireball
MONS: polar bear simulacrum w:3 generate_awake / \
wolf simulacrum generate_awake / \
yak simulacrum generate_awake
MONS: ice statue
ITEM: wand of frost / wand of cold w:5
ITEM: ring of ice / staff of cold
: if crawl.coinflip() then
ITEM: manual of ice magic
ITEM: nothing
: else
ITEM: book of ice / book of frost / book of minor magic [frost]
ITEM: book of ice / book of frost / book of minor magic [frost]
: end
ITEM: cap ego:cold_resistance w:9 / \
pair of gloves ego:cold_resistance w:9 / \
cloak ego:cold_resistance w:9 / \
naga barding ego:cold_resistance w:5 / \
centaur barding ego:cold_resistance w:5 / \
cap ego:resistance w:1 / pair of gloves ego:resistance w:1 / \
cloak ego:resistance w:1 / \
buckler ego:cold_resistance / helmet ego:cold_resistance
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxwwwxxxxxx....xxxxwxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxwwwwwxxx.......xxwxxxxxxxxxxxxxxxx
xxwwxxxxxxxxxxxxxxwwwxxx...xxx..xxxxxxxxxxxxxxxxxxxx
xxxwwwwwwwwwwwwwwwwwxxx...xxx..xxxxxxxxxxxxxxxxxxxxx
xxwwwwwwwwwwwwwwwwwxxx...xxx..xxxxxxxxxxxxxxxxxxxxxx
xxwwwxxxxxxxxxxwwxxxx3..xxx...xxxxxxxxxxxxxxxxxxxxxx
xxwwxx.G...G.xxwwxx..33xxxx..xxxxxxxxxxxxxxxxxxxxxxx
xxxxx.........xxwx....xxxxx...xxxxxxx...xxxxxxxxxxxx
xxdx....2_424..xxx..xxxxxxxx....xxx...2....xxxxxxxxx
xx*+.....44..2..xx...xxxxxxxx.......2.1.2...xxxxxxxx
xxdx....423.342.xxx.33xxxxxxxxxx...1.....1...xxxxxxx
xxxxx..4...324xxxxxxx3..xxxxxxxxx............xxxxxxx
xxxxxxxG4.2G...xxxxxxxx...xxxxwwxx2........2xxxxxxxx
xxxxxxxxxxxx....xxxxxxxx....xxxwwxx1x....x1xxxxxxxxx
xxxxxxxxxxxxxx...xx.xxxxxx....xxwwxxxx..xxxxxxxxxxxx
xxxxxxxxxxxx....xx...xxxxxxx...xxwwxxx..xxxwwxxxxxxx
xxxxxlm..xxx..xxx..x..xxxxxxxx..xwwxx..xxxwwxxxxxxxx
xxxxxxxx+xxxx.....xxx.....xxx..xxwxx..xxxwwxxxxxxxxx
xxxxx444544xxx...xxxxx........xxxwwx...xxwwxxxxxxxxx
xxxx.444444.xxxxxxxxx..3..3...xxxwwxx...xxwwxxxxxxxx
xxx..xgdegx..xxxxxx*%...3.....xxxwwxxx.66xwwxxxxxxxx
xx...xxffxx...xxxxx*%....3.3..xxwwxxxx6.6xxwwxxxxxxx
xx....xxxx...xxxxxxxxx.......xxxwwxxx...xxxwwxxxxxxx
xxxx.........xxxxxxxxxxx...xxxxwwwxxx...xxxwwwxxxxxx
xxxx...7....xxxxxxxxxxxxx..xxxwwwxxx.....xxxwwxxxxxx
xxxxx------xxxxxxxxxxxxxxxx..xxwwxx...A...xxxwxxxxxx
xxxxxx----xxxxxx...xxxxxxxx...xwwxx.......xxwwxxxxxx
xxxxxx---xxxx...xx...xx.....xxxwwxxx..<..xxxwwxxxxxx
xxxxxxx.......xxxxxx....xxxxxxwwwxxxx...xxxwwwxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP
# Foes: ice & blue devils, white imps & ufetubi, an ice statue.
# Loot: weapons and/or armour.
NAME: ice_cave_small_04
TAGS: ice_cave no_item_gen no_monster_gen no_pool_fixup
ORIENT: encompass
WEIGHT: 6
NSUBST: . = 9:1 / 1:2 / *:.
SHUFFLE: Qq / Zz / Nn / Bb / Mm
SUBST: Q=2, Z=2, N=., B=., M=.
SUBST: q=!, z=!, n=., b=., m=.
# Replaces '!'s with fog generators, then makes them floor.
: place_fog(_G, "freezing vapour", 100)
KFEAT: ! = .
# Couple of more random, milder fog generators.
NSUBST: . = 3:! / *:.
: place_fog(_G, "freezing vapour", 30)
KFEAT: ! = .
# The random ones weren't placed near the entrance, though.
SUBST: - = .
# Still more fog, in the water this time.
NSUBST: w = 3:! / *:w
: place_fog(_G, "freezing vapour", 50)
KFEAT: ! = w
{{
ice_cave_colours(_G)
dgn.set_random_mon_list("white imp w:35 / ufetubus w:35 / blue devil w:20 / \
ice devil / nothing")
ice_cave_milestone(_G)
}}
MONS: white imp / ufetubus
MONS: ice devil / blue devil w:3
MONS: ice statue
MONS: blue devil
SHUFFLE: dg, efh
SUBST: e = ed
ITEM: battleaxe ego:freezing / executioner's axe ego:freezing / \
glaive ego:freezing / halberd ego:freezing / quick blade ego:freezing / \
great sword ego:freezing / triple sword ego:freezing / \
giant spiked club ego:freezing / demon trident ego:freezing
ITEM: battleaxe ego:freezing good_item / executioner's axe ego:freezing good_item /\
glaive ego:freezing good_item / halberd ego:freezing good_item / \
great sword ego:freezing good_item / quick blade ego:freezing good_item /\
triple sword ego:freezing good_item / demon trident ego:freezing good_item /\
giant spiked club ego:freezing good_item
ITEM: demon whip good_item / demon blade good_item / demon trident good_item
ITEM: cap ego:cold_resistance / pair of gloves ego:cold_resistance / \
cloak ego:cold_resistance / buckler ego:cold_resistance / \
pair of boots ego:cold_resistance
ITEM: crystal plate mail ego:cold_resistance / \
troll leather armour ego:cold_resistance / \
ice dragon armour good_item / robe ego:resistance / \
naga barding ego:cold_resistance good_item w:5 / \
centaur barding ego:cold_resistance good_item w:5 / \
crystal plate mail ego:cold_resistance good_item / \
troll leather armour ego:cold_resistance good_item
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxx....xxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxx........xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxx...xxx....xxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx..xxx4xxx...xxxxxxxx
xxxxxx...xxxxxxxxxxx...xx44..xxxx..xxxxxx
xxxx..1..1...xxxxxxxx...xx.....xx...xxxxx
xxx.1......1...xxxxxxx........dxxx..xxxxx
xxx..........1..xxxx.....xx..dxx...xxxxxx
xxx..1..1..1....xx.....xxxxxxxx...xxxxxxx
xxxx................xxxxxxxxxx...xxxxxxxx
xxxxx.........x...xxxxxxxxxxq..xxxxxxxxxx
xxxxx1x....x3xxxxxxxxxx....Q..xxxxxxxxxxx
xxxxxxxx..xxxxwwwxxx......QqQ..xxxxxxxxxx
xxxxxxxx..xxxwwxxx....xx.........xxxxxxxx
xxxxxxx..xxxwwxx.....xx..xxxx..z...xxxxxx
xxxxxx..xxxwwxx4.b.x.....N..x...Z...xxxxx
xxxxxx...xxwwxx..B.xxx..n.N.xx.ZzZ..4xxxx
xxxxxxx...xxwwx4BbB..xx..N...xx.......xxx
xxxxxxxx.-.xwwxx.........x.n........4xxxx
xxxxxxxx---xxwwxx...xxx..x..xxx.....xxxxx
xxxxxxx---xxwwwwxxxxx....x.....x..xxxxxxx
xxxxxxx---xxwwwwwwx.....mx.....xxxxxxxxxx
xxxxxx-----xxwwwwwxx.xx.M.m..xxxxxxxxxxxx
xxxxx---A---xxwwwccccc.M.M.cccccxxxxxxxxx
xxxxx-------xwwwwc...ccc.ccc...cxxxxxxxxx
xxxxxx--<--xxwwwwc.e.........f.cxxxxxxxxx
xxxxxxx---xxwwwwwc...cc*|*cc...cxxxxxxxxx
xxxxxxxxxxxxxxxxxcccccccccccccccxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP
NAME: ice_cave_tombish
# This is an ice cave which is also a tomb of a necromancer who likes staying
# alive and simulacrums, or just a chillout of an ice fiend. By Zaba.
# Weighted as a small cave, although this is pretty tough. --Eino
TAGS: ice_cave no_item_gen no_monster_gen
ORIENT: encompass
WEIGHT: 6
# S is either an ice statue or a granite statue.
SUBST: S = GGS
KMONS: S = ice statue
# I is an ice statue with loot underneath.
KITEM: I = any scroll q:3
KMONS: I = ice statue
MONS: ice devil / blue devil / nothing w:7
# FIXME: I can't quite make up more simulacrums
MONS: grizzly bear simulacrum / bear simulacrum / dragon simulacrum /\
human simulacrum / golden dragon simulacrum w:1
MONS: Ice Fiend w:2 / necromancer
ITEM: any potion / any scroll / any weapon good_item / any armour good_item
KFEAT: ' = alarm trap / net trap / arrow trap / bolt trap w:5 / floor w:5
: ice_cave_colours(_G)
: ice_cave_milestone(_G)
: ice_cave_random_monster_list_undead_demon(_G)
MAP
xxxxx
xx...xx
xx.....xx
x...A...x
x...<...x
xx.....xx
xx...xx
x...xx
xx...x
xx...x
x...xx
xxxx...xxxx
xxIx.....xIxx
xx...........xx
x.............x
xx.............xx
x.......1.......x
x....1.....1....x
x.......U.......x
x....1.....1....x
x.......1.......x
xx.............xx
x.cnnc...cnnc.x
xxc11c...c11cxx
xc11cc+cc11cx
ccc+c...c+ccc
c...c...c...c
ccc.ccc...ccc.ccc
c...c2c...c2c...c
c+ccc+c...c+ccc+c
c'c2+.......+2c'c
c'ccc.G...G.ccc'c
c'c2+.......+2c'c
c'ccc.G...G.ccc'c
c'c2+.......+2c'c
c'ccc.G...G.ccc'c
c'c2+.......+2c'c
c+cccccc+cccccc+c
c...............c
ccccS.ccccc.Scccc
cc.cd3dc.cc
c.cdUdc.c
c.cdddc.c
c.cc+cc.c
c.'''''.c
ccccScccc
ccc
ENDMAP
############################################################################
# sprawling caverns
#
# A winding, tight cavern with a hard challenge at the end. You can always
# go back to the beginning to retreat.
# The caverns are more rare than the caves.
NAME: ice_cave_caverns_01
TAGS: ice_cave no_item_gen no_monster_gen no_pool_fixup
WEIGHT: 5
ORIENT: encompass
# A bit of layout randomization.
: if crawl.coinflip() then
SUBST: ' = x
SUBST: - = .
SUBST: _ = .
: else
SUBST: ' = .
SUBST: - = x
SUBST: _ = w
: end
: ice_cave_colours(_G)
: ice_cave_milestone(_G)
# Two different populations: undead/demon and natural/giant.
: if crawl.coinflip() then
: ice_cave_random_monster_list_undead_demon(_G)
: ice_cave_caverns_undead_demon_monster_set(_G)
ITEM: cloak ego:fire_resistance good_item / wizard hat good_item / \
pair of gloves good_item / pair of boots good_item / nothing
ITEM: book of ice / book of unlife / staff of cold / staff of death / \
nothing w:30
ITEM: ring of ice / ring of protection from fire / ring of life protection / \
wand of cold / wand of draining / nothing
: else
: ice_cave_random_monster_list_natural_giant(_G)
: ice_cave_caverns_natural_giant_monster_set(_G)
ITEM: animal skin good_item ego:fire_resistance / \
battleaxe good_item ego:freezing w:4 / \
glaive good_item ego:freezing w:4 / \
great sword good_item ego:freezing w:2 / nothing
ITEM: book of ice / \
crossbow ego:frost good_item no_uniq / \
longbow ego:frost good_item no_uniq / nothing w:20
ITEM: ring of ice / ring of protection from fire / wand of cold / \
arrow ego:ice q:25 / bolt ego:ice q:20 / nothing
: end
ITEM: any wand / any potion w:5 / any scroll w:5
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxx.xxxxxxxxxxx-'xxxxxxxxxxwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx....xxxxxxxxx....xxxxxxxxxwwwxxxx*xxx$$xxxxxxxx...xx...xxxxxxxxgxxxx
x...A.xxxxxx....xx....xxxxxxxwwwwx*x*xxx$$x-.x...xx...xx...xxxxxgxgxxx
x.<....'-....xxxxxxx...xxxxxwwwwxxx*x.xxxx.'x..xxxxxxxxxx....xxxx.xxxx
xx..xx....xxxxxxxx1111xxxxwwwwwwxxxxxx...xxxxx..xxxxxxxxxx..3..x.xxxxx
xxxxxxxxxxxxxxx....xxxxxxxxwwwwxxxx11..x...x..xxxxwwwxxxxxx.....xxxxxx
xxwxxwxwxxx.....xxxx______xxwwxxxx51xxxxxx..xxxwwwwxwxxxxx..6xxxxxxxxx
xxxwxxxxx..xxxxxx___xx_____xxxx...xxxxwxxxxxxwwwxxxxxxxxx.66xxxwwwxxxx
xwxxxx....xxwxx__xxxxxxxx___xx..xxxwwwxwxxxwwwxxxxxxxx....xxxxwwwxxxxx
xxxx...xxxxwxx_xxxx....xxx__xxx..xxxxxwwwwwwxxxx....x...xxxxwwwxwwwxxx
xxx..xxxwwwwx-xxx...xx...xxx_xxx..xxwwwwwxxxx...xx....xxxwwwxxxxxxwwxx
x...xxwwwwwwxx-...x.xxxx...xx_x..xxxxwwwwxxx..xxxxxxxxxwxxxxxx.xxxxwxx
x..xxxwwwwwxxx141xxxgxxxx...x_xx.11xxxwwwwxxx...xxxwwwwxx...x.x.xxxxxx
xx..xxxwwwwxx...xxxgxxx...xxx_xxxx51xxxwwwxxxx..1.xxxwwx.U...xxx..xxxx
xxx..xwwwwxxxx....xxxx5.xxxwxx_xx...xxxxxwwwxxxx.1.5xxxxx.x.xxx..xxxxx
xx..xxxwwwwxx'x.xxxxx5..5xxwwxx_xxx1.xxxxxwwxxxxx5415.xxxxxx.xx...xxxx
xx...xxwwwxx..'xxxxwxx15.5xxwwxx_xxx51xxxxwwxxxxxx5.41.xxxx..xxx454xxx
xxx..-xxxxx..xxxwxwwwxxx5.1xxwwxx_--x1xxxxxwwwxxxxxx.5..x...xxx5.7.5xx
xxx...-xx-..xxxwxwwxxwxx-x1.xxwwxx'''xxxxxxwwwwxxxxxxx'...xxxxxx5.5xxx
xxx...x--xx..1xxxxxwxx--x-..'xxwx'x'xxxxxwxxwwwwxxxx*.xxxxx.xxx..xxx|x
xxx222x''x''x..xx1xxx----xxxx'xx'''xxxxwxxxwwwwwwxxxx*xxxx.<.xxx.$defx
xxxx'.'xx'xx1.x.1...2xxxxxxxxx'''xxxxwxxwwxwwwwwwwwxxx--........x|fedx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'xxxxwxwwwxwwwwwxwxxxxxxxxxx.xxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP
NAME: ice_cave_caverns_02
TAGS: ice_cave no_item_gen no_monster_gen no_pool_fixup
WEIGHT: 5
ORIENT: encompass
# Two different populations: undead/demon and natural/giant.
# The fog generators are placed differently - the natural population
# doesn't have enough cold resistance for many clouds. The ';' placeholder
# symbol gives the natural monsters some safety padding from generator
# placement.
: if crawl.coinflip() then
: ice_cave_random_monster_list_undead_demon(_G)
: ice_cave_caverns_undead_demon_monster_set(_G)
ITEM: cloak ego:fire_resistance good_item / wizard hat good_item / \
pair of gloves good_item / pair of boots good_item / nothing
ITEM: book of ice / book of unlife / staff of cold / staff of death / \
nothing w:30
ITEM: ring of ice / ring of protection from fire / ring of life protection / \
wand of cold / wand of draining / nothing
# Take out ';' safety padding.
SUBST: ; = .
# Place the fog generators:
SUBST: . = .:40 !:1
: place_fog(_G, "freezing vapour", 25)
KFEAT: ! = .
: else
: ice_cave_random_monster_list_natural_giant(_G)
: ice_cave_caverns_natural_giant_monster_set(_G)
ITEM: animal skin good_item ego:fire_resistance / \
battleaxe good_item ego:freezing w:4 / \
glaive good_item ego:freezing w:4 / \
great sword good_item ego:freezing w:2 / nothing
ITEM: book of ice / \
crossbow ego:frost good_item no_uniq / \
longbow ego:frost good_item no_uniq / nothing w:20
ITEM: ring of ice / ring of protection from fire / wand of cold / \
arrow ego:ice q:25 / bolt ego:ice q:20 / nothing
# Place the fog generators. The predetermined ones are mild.
: place_fog(_G, "freezing vapour", 5)
# Place a few random, mild ones.
SUBST: . = .:60 !:1
: place_fog(_G, "freezing vapour", 10)
KFEAT: ! = .
SUBST: ; = .
: end
ITEM: any wand / any potion w:5 / any scroll w:5
# The ':' provides fog-free zone near the entrance.
SUBST: : = .
# Some layout randomization.
: if crawl.coinflip() then
SUBST: '=x , -=.
: else
SUBST: '=. , -=x
: end
: ice_cave_colours(_G)
: ice_cave_milestone(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx::xxwwwwxxx.x.'x-;x5;;5xxwwwwwxxx1;;;x;Wxxxxxx15415;xxxxxx......xxxx
xx:<:xwwwwxx...x.x;x;x15;5xxwwxxx''';;x;xxWWxx15xx5;41;xxxx..xxx...xxx
xxx::xxwwxx..xxx-;'xx;xx5;1xxxx'''xxx.-xxxxWWWxxxxxx;;;;x...xxx..U..xx
xxx:A:xxwx..xxxwxxxwwwwxxx1;x'''xxwwx---xxxxWWwxwwwxxx'...xxxxxx...xxx
xxx:::xwwxx;;;xxxxxwwwwwxx;;'xxxxxxxxxx--xxwwwwwwwxx*.xxxxxxxxx..xxxxx
xxx:::xxwxxxx;;xx1-'xxwwxxx--xxxxx'''x--xxwwwwwwwxx.x*xxxx..xxxx..xxxx
xxxx:11xwwxx1;x;1;1;2xxwx---xx.*.*.xx..xxxwwwwwwwwww-x-x..xx.x..xxxxxx
xxx11:xxwwwxxx1xxxxx1;xxxx--x.g.T.g.xxx;;xwwwwwwwwx-xx..xxxxx.xxxxxxxx
xxxx::xwwwwwxx2;;1x11;;xxxx-...*.*..xx;;;xxwwwwwwx'...xxxxxxxxxxxxxxxx
xxxxx:xxwxxxxxxxxx;xxx;;xwxx...xxxxxxxxx;;xxwwwxxx.-xxxxxxxxxxxxxxxxxx
xxxxx;;xxxx.x....xxxx;;;xxwxxx.-xwwwxxx1xxxxwwwxx..xxxxxxxxxxxxxxxxxxx
x*x$xx..xx.*..-'..xxxxx..xxx''.-xwwwx15xxxwwwwxxxx;;xxxxxxxxxxxxxxxxxx
xx$x.xx..xx..xxxx..xwwxxx;;''xx--xxxx115xxwwwwwxxxx;;;xxxxxxxxxxxxxxxx
x$x..x.!..xx..xxx..xwwwwxx--xxxx-xx;1;xxxwwwwwwxxxxx;;;;xxxxxxxxxxxxxx
xx.xx;x;;xxx..xx...xxwwwwxx1;xxxx.;;xxxxxwwwwwwxxxxxx;2;2;xxxxxxxxxxxx
xxxxxx;;xxxx...xx.3.xxwwxx'-;1x'''xxxxxwwwwwwwwxxxxxx;54;2;xxxxxxxxxxx
xxxxx;;xxxx...xxxx...xxxx;;x;;''xxxxxxwwwwwwwxxxx$$x;2475;;;xxxxxxxxxx
xxxx5;5xx...xxxx.x.xxxxx..;x;xxxxxxwwwwwwwwxxxxdf$$;;;;;;;xx;xxxxxxxxx
xxxx;;xx;..xxwwxx|x.xx...xx;xxxxxwwwwwwwwwwwxxed|$$$;;;xxxxxx..xxxxxxx
xxxx122;;.xxwwwwxx....xxxxxxxxxxwwwwwwwwwwwwwxxfe|$$$$.xxxxxxxx....xxx
xxxxx1;;xxxwwwwwxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxx...<x
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP
NAME: ice_cave_caverns_03
TAGS: ice_cave no_item_gen no_monster_gen no_pool_fixup
WEIGHT: 5
ORIENT: encompass
# Two different populations: undead/demon and natural/giant.
# Different fog generator generation according to population,
# as the natural monsters can't stomach the clouds.
: if crawl.coinflip() then
: ice_cave_random_monster_list_undead_demon(_G)
: ice_cave_caverns_undead_demon_monster_set(_G)
ITEM: cloak ego:fire_resistance good_item / wizard hat good_item / \
pair of gloves good_item / pair of boots good_item / nothing
ITEM: book of ice / book of unlife / staff of cold / staff of death / \
nothing w:30
ITEM: ring of ice / ring of protection from fire / ring of life protection / \
wand of cold / wand of draining / nothing
# Place fog generators.
SUBST: 3 = 3!
: place_fog(_G, "freezing vapour", 25)
KFEAT: ! = .
SUBST: ; = .
SUBST: . = .:100 !:1
: place_fog(_G, "freezing vapour", 15)
KFEAT: ! = .
: else
: ice_cave_random_monster_list_natural_giant(_G)
: ice_cave_caverns_natural_giant_monster_set(_G)
ITEM: animal skin good_item ego:fire_resistance / \
battleaxe good_item ego:freezing w:4 / \
glaive good_item ego:freezing w:4 / \
great sword good_item ego:freezing w:2 / nothing
ITEM: book of ice / \
crossbow ego:frost good_item no_uniq / \
longbow ego:frost good_item no_uniq / nothing w:20
ITEM: ring of ice / ring of protection from fire / wand of cold / \
arrow ego:ice q:25 / bolt ego:ice q:20 / nothing
# Place fog generators.
SUBST: 3 = 3!
: place_fog(_G, "freezing vapour", 20)
KFEAT: ! = .
SUBST: . = .:100 !:1
: place_fog(_G, "freezing vapour", 8)
KFEAT: ! = .
SUBST: ; = .
: end
ITEM: any wand / any potion w:5 / any scroll w:5
# The ':' provides a fog-free zone near the entrance.
SUBST: : = .
# A bit of layout randomization for the middle part.
: if crawl.coinflip() then
SUBST: '=x , -=.
: else
SUBST: '=. , -=x
: end
: ice_cave_colours(_G)
: ice_cave_milestone(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x.xxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.U.x$xxxxxxxx...xx;;;xxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwxxx.xxx$x..x...xx...xx;55xxxxx
xxxxxxxxxxxxxxxxxxxxxxxxwwwwxWWWxxxxxxx..x..xxxxxxxxxx;554xxx
xxxxxxxxxxxxxxxxxxxxxxxxxwxxxxxWwWxWW.xxxxx..xxwwwwwwxx;2525x
xxxxxxxxxxxxxxxxxxxxxwwxxxxxxxxxWWWWxW..xx..xxwwwwwwwwxx427;x
xxxxxxxxxxxxxxxxxxxwwwwwxxxxxxxWWxwWwxx...xxxwwwwwwwxxx;;5xxx
xxxxxxxxxxxxxxxxxxxxwwwwwxxx.WWxxxxwwwxxxxxwwwwwwxxxxx;;;xxxx
xxxxxxxxxxxxxxxxxxxxxxwwwxx."xxxwwwwwxwwxwwwxxxxxxx....xxxxxx
xxxxxxxxxxxxxxxx;...xxxwwwxx..xxxwwwwwwwwwwxx<..!x...xx.xfxxx
xxxxxxxxxxxxxx;;;xx...xxxwwxx..xxxxwwwwwwwwxxxx....xxxxxex|xx
xxxxxxxxxxxx;44x;xxxx...xxwx..xxxxxxwwxwxwwwwxxxxxxxxxxdx$xdx
xxxxxxxxxxx;4;xxx$xxxx;;;xwxx"..xxxxxwwwwwxwwwxxxxxxxxxx|xexx
xxxxxxxxxx;;;xxx$xxx;;;xxxwwxxx..xxxwwwxxwwwwxwxxxxxxxxxxfxxx
xxxxxxxxxxx;;..xxxx5;xxxwwwwxx...xxxxxwwwwwwwxxxxxxxxxxxxxxxx
xxxxxxxxxx.x.xxxxx51;5xxwwwwxxxx..xxxxxwwxxxxxxxxxxxxxxxxxxxx
xxxxxxxxx;;;xxxxxxx15;5xxwwxxx'''".xxxxwwxxxxxxxxxxxxxxxxxxxx
xxxxxxxx;;xxxxxxxxxxx5;1xxxx''xxxx.-xxxxwwwxxxxxxxxxxxxxxxxxx
xxxxxxx;1xxxxxxxxxxxxxx;;x'''xxxxx---xxxwwwwxxxxxxxxxxxxxxxxx
xxxxxxxx;11xxxxxxxxxxxx;;''xxxxx'xxx--xxxwwwwxxxxxxxxxxxxxxxx
xxxxxxxxxx1;xx.xxxxxxxxx--xxxxx''''--xxxwwwwwwxxxxxxxxxxxxxxx
xxxxxxxxx;;x;;....xxxx---xx.*.*.xx..xxxxwwwwwwwwxxxxxxxxxxxxx
xxxxxxxxxxx;xxxxx.;xxxx--x.g.T.g.xxx..xxxwwwwxxxxxxxxxxxxxxxx
xxxxxxxxxxx2;;2x;;;;xxxx-...*.*..xx.;;xxwwwwwwxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxx;xxx;1xxxx...xxxxxxxxx;;xxwwwxxxxxxxxxxxxxxxxx
xxxxxxxx.x;;;'xxxx;1;xxxxxx.-xxxxxxx1xxxxwwwxxxxxxxxxxxxxxxxx
xxxxxxx;*66-x..xxxxx11xxxx'.--x---15xxxwwwwxxxxxxxxxxxxxxxxxx
xxx::<xx;;xxxx..xxxxxx;;''xx-x-xxx115xxwwwwwxxxxxxxxxxxxxxxxx
xxA::xxxx;.xxx..xxxxxxx--xxxx-xx.11xxxwwwwwwxxxxxxxxxxxxxxxxx
xx::::xxx;,xx...xxxxxxxx1;xxx-;;;xxxxxwwwwwwxxxxxxxxxxxxxxxxx
xx:::xxxx;;;xx.3.xxxxxxxx;1x'''xxxxxwwwwwwwwxxxxxxxxxxxxxxxxx
xx::xxxx21;xxxx...xxxx..x;;''xxxxxxwwwwwwwxxxxxxxxxxxxxxxxxxx
x:::xx;12xxxx.x.xxxxx...x;xxxxxxwwwwwwwwxxxxxxxxxxxxxxxxxxxxx
x::xx;;;xxxxxx|x.xx...xx;xxxxxwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxx
x:::..;xxxxxxxx....xxxxxxxxxxwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxx
xx:..xxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP
###############################################################################
#
# The Ice Cave (Eino)
#
#
# Ice Cave is aimed to appear at somewhere in the middle game. It should be
# fairly challenging, but also allow retreating. The entries shouldn't be out
# of depth.
#
# Flavour: white colours, ice monsters, appropriate clouds.
# The escape is at the start. The player can back away if s/he decides
# some challenges are too much to handle.
#
###############################################################################
{{
function ice_cave_portal(e)
local desc_long = "A permanent cold front seems to surround this " ..
"portal. Whatever lives on the other side, they will be full of " ..
"grim and arctic fury. You note that the archway is melting away."
local timeout_turns = crawl.random_range(1200, 1700)
local messager =
timed_msg {
visible = true,
-- $F{xxx} will be substituted with the 'entity' property of the timed
-- marker, or with the desc property (if entity is not set).
messages = time_messages(timeout_turns,
"$F{The} is slowly melting away.",
"$F{The} is melting away.",
"$F{The} is quickly melting away.",
"$F{The} is almost completely melted.")
}
e.lua_marker('O',
timed_marker {
disappear = "The archway melts and disappears.",
desc = "A frozen archway",
desc_long = desc_long,
entity = 'archway',
dst = "ice_cave",
dstname_abbrev = "IceCv",
dstorigin = "in an ice cave",
overmap = "frozen archway",
turns = timeout_turns,
floor = "floor",
msg = messager })
e.kfeat("O = enter_portal_vault")
e.colour("O = white")
end
}}
{{
-- Alter short feature descriptions for all ice cave destination vaults.
function ice_cave_feat_descs()
dgn.set_feature_desc_short("rock wall", "ice covered $BASE")
dgn.set_feature_desc_short("gate leading back to the Dungeon",
"ice covered $BASE")
dgn.set_feature_desc_short("empty arch of ancient stone",
"ice choked $BASE")
dgn.set_feature_desc_short("Some shallow water",
"Some ice crusted shallow water")
dgn.set_feature_desc_short("Some deep water",
"Some ice crusted deep water")
dgn.set_feature_desc_long("Some deep water",
"It looks freezing!");
end
dgn.set_lt_callback("ice_cave", "ice_cave_feat_descs")
}}
# For destination (not entry) vaults, use the following line after all
# substitutions have been performed:
# : ice_cave_colours(_G)
{{
function ice_cave_colours(e)
e.kfeat("< = exit_portal_vault")
e.colour("< = white")
e.lrockcol("white")
e.lfloorcol("blue")
e.lrocktile("wall_ice")
e.lfloortile("floor_ice")
end
}}
# Using this function will turn any ! glyph on the map into a fog generator.
# Any use requires two parameters as follows:
# : place_fog(_G, "freezing vapour", 25)
{{
function place_fog(e, type, strength)
e.lua_marker("!", fog_machine { pow_max = strength, cloud_type = type,
delay_min = 50, delay_max = 300, size = 12,
start_clouds = 1 } )
end
}}
# Monster set functions
# Some random monster lists are the same for multiple destination caves.
# : ice_cave_random_monster_list_natural_giant(_G)
{{
function ice_cave_random_monster_list_natural_giant(e)
e.set_random_mon_list("wolf w:35 / yak w:35 / polar bear w:15 / death yak / \
frost giant w:5")
end
}}
# : ice_cave_random_monster_list_undead_demon(_G)
{{
function ice_cave_random_monster_list_undead_demon(e)
e.set_random_mon_list("white imp w:20 / ufetubus w:20 / freezing wraith / \
wolf simulacrum / yak simulacrum / \
polar bear simulacrum / human simulacrum / \
elf simulacrum / orc simulacrum / \
draconian simulacrum / ogre simulacrum / \
centaur simulacrum / troll simulacrum / \
naga simulacrum / blue devil / ice devil / \
ice fiend w:5")
end
}}
# : ice_cave_random_monster_list_undead_necromancer(_G)
{{
function ice_cave_random_monster_list_undead_necromancer(e)
e.set_random_mon_list("white imp w:20 / ufetubus w:20 / freezing wraith / \
wolf simulacrum / yak simulacrum / \
polar bear simulacrum / human simulacrum / \
elf simulacrum / orc simulacrum / \
draconian simulacrum / ogre simulacrum / \
centaur simulacrum / troll simulacrum / \
naga simulacrum / necromancer")
end
}}
# Currently, all the "caverns" maps use the same monster sets for placement.
# : ice_cave_caverns_undead_demon_monster_set(_G)
{{
function ice_cave_caverns_undead_demon_monster_set(e)
e.mons("white imp w:5 / ufetubus w:5 / human simulacrum w:2 / \
elf simulacrum w:2 / orc simulacrum w:2")
e.mons("polar bear simulacrum / freezing wraith w:3 / nothing w:1")
e.mons("ice statue")
e.mons("ice devil")
e.mons("draconian simulacrum / ogre simulacrum / centaur simulacrum / \
naga simulacrum / troll simulacrum")
e.mons("freezing wraith / blue devil")
e.mons("patrolling ice fiend")
end
}}
# : ice_cave_caverns_natural_giant_monster_set(_G)
{{
function ice_cave_caverns_natural_giant_monster_set(e)
e.mons("wolf / yak w:3 / nothing w:1")
e.mons("polar bear / nothing w:5")
e.mons("ice statue")
e.mons("polar bear / death yak w:5")
e.mons("polar bear / yak")
e.mons("wolf")
e.mons("patrolling frost giant")
end
}}
# Add a milestone for entering the Ice Cave.
{{
function ice_cave_milestone(e)
crawl.mark_milestone("br.enter", "entered an Ice Cave.")
end
}}
# Entries ##########################################
NAME: portal_ice_cave_entry_animals_and_master
TAGS: uniq_ice_cave
DEPTH: D:16-20, Lair:6-
ORIENT: float
: ice_cave_portal(_G)
COLOUR: X = white
KFEAT: X = x
MONS: wolf / yak w:5 / nothing w:1
MONS: yak / polar bear w:5 / nothing w:1
MONS: polar bear / nothing w:2
MONS: ice dragon w:8 / nothing w:2
MAP
xxxxxxx
xxXXXXXxx
xXX.4.XXx
xX.3.3.Xx
xX..O..Xx
xX.2.2.Xx
xXX...XXx
xxXX.1.Xx
xX11XXXx
xXX.XXxx
xXX.XXx
xxXX.Xx
xxXX.XXx
xXX@XXxx
ENDMAP
NAME: portal_ice_cave_entry_horrid_things
TAGS: uniq_ice_cave
DEPTH: D:14-20, Elf:2-6
ORIENT: float
: ice_cave_portal(_G)
COLOUR: X = white
KFEAT: X = x
MONS: ice beast / freezing wraith w:2 / nothing w:2
MONS: freezing wraith / nothing w:3
MONS: azure jelly w:3 / freezing wraith w:7
MAP
xxxxxxxxxxxxxxxxxxxxxxxx
xxXXXXXxXXXXXXXXXXxxxxxx
xXX...XXX........XXxxxxx
xX.....X....2..1..XXXXXX
xX..O..+..3..1..1......+
xX.....X....2..1..XXXXXX
xXX...XXX........XXxxxxx
xxXXXXXxXXXXXXXXXXxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP
NAME: portal_ice_cave_demonic_guard
TAGS: uniq_ice_cave
DEPTH: D:14-20, Elf:2-6
ORIENT: float
: ice_cave_portal(_G)
COLOUR: x = white
MONS: ice devil
MAP
xxxxxxx
x..O..x
x.....x
x.1.1.x
x.....x
xxx.xxx
xxx.xxx
xxx.xxx
xxx.xxx
xxx+xxx
ENDMAP
NAME: portal_ice_cave_entry_ice_statue_001
TAGS: uniq_ice_cave
DEPTH: D:14-20, Elf:2-6, Vault:1-7
ORIENT: float
: ice_cave_portal(_G)
COLOUR: x = white
MONS: ice statue
MAP
xxxxxxx
x.....x
x..O..x
x.....x
x..1..x
x.....x
x.....x
xxx+xxx
ENDMAP
NAME: portal_ice_cave_entry_ice_statue_002
TAGS: uniq_ice_cave
DEPTH: D:14-20, Elf:2-6, Vault:1-7
ORIENT: float
: ice_cave_portal(_G)
MONS: ice statue
MAP
.....
.........
...........
.....1.....
.....O.....
.....1.....
...........
.........
.....
ENDMAP
# The destination vaults ############
#
# Currently, there are four cave vaults (each of weight 8) and three
# cavern vaults (each of weight 5).
############################################################################
# small caves
#
# All have the starting point next to the exit, so you can always retreat;
# a middle point/area where there is some loot; and the end, where there is a
# bigger challenge and some major loot. Ideally weaker characters attempt
# to overcome the midpoint and then go back to dungeon, and strong characters
# can try to clear the whole cave.
# Foes: animals + frost giant & an ice statue.
# Loot: heavy weapons and rC gear wearable by big races,
# plus some useful potions in the freezer.
NAME: ice_cave_small_01
TAGS: ice_cave no_item_gen no_monster_gen no_pool_fixup
ORIENT: encompass
WEIGHT: 8
# Randomize the layout slightly.
SHUFFLE: "'
SUBST: "=. , ':x .:1
: ice_cave_colours(_G)
: ice_cave_random_monster_list_natural_giant(_G)
: ice_cave_milestone(_G)
MONS: yak / wolf / polar bear w:4
MONS: polar bear
MONS: frost giant
MONS: polar bear w:3 generate_awake / wolf generate_awake / \
yak generate_awake
MONS: ice statue
SHUFFLE: defg
ITEM: giant club / giant spiked club / great mace w:9 / \
battleaxe w:7 / glaive w:8 / halberd w:8 / great sword w:6 / \
nothing w:58
ITEM: great mace good_item / battleaxe good_item / glaive good_item / \
halberd good_item / great sword good_item / nothing w:50
ITEM: battleaxe ego:freezing / glaive ego:freezing / halberd ego:freezing / \
great sword ego:freezing / battleaxe ego:freezing good_item / \
glaive ego:freezing good_item / halberd ego:freezing good_item / \
great sword ego:freezing good_item / nothing w:80
ITEM: cap ego:cold_resistance w:9 / cap ego:resistance w:1 / \
cloak ego:cold_resistance w:9 / cloak ego:resistance w:1 / \
shield ego:cold_resistance w:9 / shield ego:protection w:1 / \
large shield ego:cold_resistance w:5 / \
animal skin ego:cold_resistance / nothing w:60
ITEM: potion of resistance w:5 / potion of gain strength / \
potion of might / potion of confusion / potion of levitation / \
potion of experience w:2
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx..xxxxxxxxxx12....xxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx...xx...xxxx...2xxx...xxxxxxxxxxxxx
xxxxxxxxxx......1..xxxxx..x212.xxxxxxx...1xxxxxxxxxx
xxxxxxx.......1..1.xxxxxx....xxxxxxxxxxxx21..xxxxxxx
xxxxxx...xxxx.3.1....xxxxxxxxxxxxxwwwxxxxxx....xxxxx
xxxx...xxxfgxx.1..1...xxxxxxxxxxwwwwwxxxxxxxx....xxx
xxx...xxdegefxx..1.....xxxxxwwwwwwwwwwwwwxxxxxx....x
xxx...x$$$$gdex.......xxxxxwwwwwwwwwwwwwwwwwxxxxx..x
xxx...x....$$xx.....xxxxwwwwxxwwwwwwwwwwwwxxxxxx11xx
xxxx.......xxx.....xxwwwwxxxxxxxxxwwwwwwxxxxx...2xxx
xxxxx............xxxwwwwxxxxxxxxxxxwwwxxxx......xxxx
xxxx"xx.........x'wwwwwxxxxxxxxxxxxwxxxx...xxxxxxxxx
xxwwxxxxxxxxxxxxxxwwwxxxxxxxxxxxxxxxxxx..xxxxxxxxxxx
xxxwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxx..xxxxxxxxxxxx
xxwwwwwwwwwwwwwwwwwx'xxxxxxxxxxxxxxx5...xxxxxxxxxxxx
xxwwwxxxxxxxxxxwwxx'x'xxxxxxxxxxxxx.......xxxxxxxxxx
xxwwxxxxxxxxxxxwwxxx'xxxxxxxxxxxxxxxx.......xxxxxxxx
x"xxxxxxxxxxxxxxwxx'xxxxxx"xxxxxxxxxxx....2...xxxxxx
xx"xxxxxxxxxxxxxxx'xxxxxxx""""x..xxxxxxx2......xxxxx
xxx"xxxxxxxxxxxxx'xxxxxxx"xxxx.......xxx.......xxxxx
xxx"xxxxxxxxxxxxx''xxxxx"xxx''xx......21x.....xxxxxx
xxxx""xxxxxxxxxxxxx'xxx"xxx'xxxxx....1..2....xxxxxxx
xxxxxx""""xxxxxxxxxx'xx"xxx'xxwwxx.1......1.xxxxxxxx
xxxxxxxxxx"xxxxxxxxx'xxx"xxx'xxwwxx.x....x.xxxxxxxxx
xxxxxxxxx"xxxxxxxxx'xxx"xxxxx'xxwwxxxx..xxxxxxxxxxxx
xxxxxxx""xxxxxxxxx'xxx"xxxxxx'xxxwwxxx..xxxwwxxxxxxx
xxxxxx"xxxxxxxxxxx''xxx"xxxxxx'xxwwxx..xxxwwxxxxxxxx
xxxxx"xxxxxxxxxxxxx'xxxx""xxxx'xxwxx..xxxwwxxxxxxxxx
xxxx"xxxxxxxxxxxxxxx'xxxx"xxx'xxxwwx...xxwwxxxxxxxxx
xxx"xxxxxxxxxxxxxxxxx'xxxx"x'xxxxwwxx...xxwwxxxxxxxx
xxx"xxxxxxxxxxxxxxxxx'xxxxx2xxxxxwwxxx44.xwwxxxxxxxx
xxx"xxxxxxxxxxxxxxxxx'x..x.xxxxxwwxxxx4.4xxwwxxxxxxx
xx"xxxxxxxxxxxxxxxxxxx.hx.xxxxxxwwxxx...xxxwwxxxxxxx
xx"xxxxxxxxxxxxxxxx.1xhxhx.xxxxwwwxxx...xxxwwwxxxxxx
x"xxxxxxxxxxxxxxxxx.xhxhxh.xxxwwwxxx.....xxxwwxxxxxx
xx"xxxxxxxxx"xxxxxxx1.....xxxxxwwxx...A...xxxwxxxxxx
xxx"""xxx"""x""xxx""xxxxxxxxxxxwwxx.......xxwwxxxxxx
xxxxxx"""xxxxxx"""xxxxxxxxxxxxxwwxxx..<..xxxwwxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwxxxx...xxxwwwxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP
# Foes: ice beasts, ice dragons & ice statues.
# Loot: some gold, jewellery (approximately three rings).
NAME: ice_cave_small_02
TAGS: ice_cave no_item_gen no_monster_gen no_pool_fixup
ORIENT: encompass
WEIGHT: 8
# Randomize the layout slightly.
SHUFFLE: "'
SUBST: "=. , ':x .:1
: ice_cave_colours(_G)
: dgn.set_random_mon_list("ice beast w:90 / ice dragon / nothing")
: ice_cave_milestone(_G)
MONS: ice beast
MONS: ice dragon
MONS: ice beast generate_awake
MONS: ice statue
ITEM: any jewellery / gold w:15 / nothing w:5
ITEM: any jewellery good_item / gold w:5 / nothing w:5
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxx......xxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxx.....xxx....xxxxxx
xxxxxxxxxxxxxxxxxxxxxx..xxxxxxx...2..xxxx
xxxxwwwxxxxxxxxxxxxxxxxx.xxxx$$.2....dexx
xxwwwwwxxxxxxxxxxxxxx..xx.xx$$$$....deddx
xwwwwwwwwwwxxxxxxxxx.xx..xx$$$$$$..deddxx
xxxwwwwwwwwwwwxxxxx..xxxxxxxx$$$$$$$xxx'x
xwwwwwwwwwwwxxxxxx11xxxxwwwxxxxxxxxxxwx'x
xxxxwwwwwwxxxxx...1xxwwwwwwwwwwwwwwwwwwxx
xxxxxwwwxxxx......xxwwwwwwwwwwwwwwwwwwwxx
xxxxxwxxxx...xxxxxxxxxxxxxxxxxxxwwwwwwxxx
xxxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxxxx'xxxx
xxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxxxx.xxxxx
xxxxxx....xxxxxxxxxxxxxxxxxxx"""x..$$xxxx
xxxx........xxxxxxxx""xxxxx""xxx.xxx$xxxx
xxx...........xxxxx"xx""x""xxxxxx'xxx"xxx
xx..............x""xxxxx"xxxxxxxxx'xxx"xx
x................xxxxxxxxxxxxxxxxxx'xx"xx
x.................xxxxxxxxxxxxxxxxxx'xx"x
xx...1.111.1....xx'xxxxxxxxxxxxxxxxx'xx"x
xxx...1.1.1.....xxx'xxx''xxxxx''x'x'xx"xx
xwxx..........xxxxxx'''xx'xxx'xx'x'xx"xxx
xwwxx4x....x4xxxxxxxxxxxxx''$xxxxxxx"xxxx
xxwwxxxx..xxxxxxxxxxxxxxxxx$$$xxxx""xxxxx
xxxwwxxx..xxxxxxxxxxxxxx"xx$$$$xx"xxxxxxx
xxxwwxx..xxxxxxxxxxxxxx"x""x$$"xxx"xxxxxx
xxxwxx..xxxxxxxxxxxxxxx"xxxxxxx"x"xxxxxxx
xxxwwx...x""x"xxxxxxxxxx"xxxxxxx"xxxxxxxx
xxxwwxx...xx"x""xxxxxxxxx"xxxxxxxxxxxxxxx
xxxwwxxx33.xxxxx""xxxxx""xxxxxxxxxxxxxxxx
xxwwxxxx3.3xxxxxxx"""x"xxxxxxxxxxxxxxxxxx
xxwwxxx...xxxxxxxxxxx"xxxxxxxxxxxxxxxxxxx
xxxxxxx...xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xwwxxx.....xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xwwxx...A...xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xwwxx.......xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xwwxxx..<..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xwwxxxx...xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP
# Foes: mostly in the undead vein, plus a necromancer and an ice statue.
# Loot: ice magic loot, gear of cold resistance (one piece).
NAME: ice_cave_small_03
TAGS: ice_cave no_item_gen no_monster_gen no_pool_fixup
ORIENT: encompass
WEIGHT: 8
KFEAT: _ = altar_kikubaaqudgha
SUBST: - = ........-
KFEAT: - = alarm trap
: ice_cave_colours(_G)
: ice_cave_random_monster_list_undead_necromancer(_G)
: ice_cave_milestone(_G)
MONS: ice beast
MONS: white imp
MONS: freezing wraith
MONS: human simulacrum / elf simulacrum / orc simulacrum / \
draconian simulacrum w:5 / ogre simulacrum w:5 / \
centaur simulacrum w:5 / troll simulacrum w:5 / naga simulacrum w:5
MONS: necromancer / necromancer ; robe ego:cold_resistance / \
necromancer ; robe ego:cold_resistance . wand of fire / \
necromancer ; robe ego:cold_resistance . wand of fireball
MONS: polar bear simulacrum w:3 generate_awake / \
wolf simulacrum generate_awake / \
yak simulacrum generate_awake
MONS: ice statue
ITEM: wand of frost / wand of cold w:5
ITEM: ring of ice / staff of cold
: if crawl.coinflip() then
ITEM: manual of ice magic
ITEM: nothing
: else
ITEM: book of ice / book of frost / book of minor magic [frost]
ITEM: book of ice / book of frost / book of minor magic [frost]
: end
ITEM: cap ego:cold_resistance w:9 / \
pair of gloves ego:cold_resistance w:9 / \
cloak ego:cold_resistance w:9 / \
naga barding ego:cold_resistance w:5 / \
centaur barding ego:cold_resistance w:5 / \
cap ego:resistance w:1 / pair of gloves ego:resistance w:1 / \
cloak ego:resistance w:1 / \
buckler ego:cold_resistance / helmet ego:cold_resistance
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxwwwxxxxxx....xxxxwxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxwwwwwxxx.......xxwxxxxxxxxxxxxxxxx
xxwwxxxxxxxxxxxxxxwwwxxx...xxx..xxxxxxxxxxxxxxxxxxxx
xxxwwwwwwwwwwwwwwwwwxxx...xxx..xxxxxxxxxxxxxxxxxxxxx
xxwwwwwwwwwwwwwwwwwxxx...xxx..xxxxxxxxxxxxxxxxxxxxxx
xxwwwxxxxxxxxxxwwxxxx3..xxx...xxxxxxxxxxxxxxxxxxxxxx
xxwwxx.G...G.xxwwxx..33xxxx..xxxxxxxxxxxxxxxxxxxxxxx
xxxxx.........xxwx....xxxxx...xxxxxxx...xxxxxxxxxxxx
xxdx....2_424..xxx..xxxxxxxx....xxx...2....xxxxxxxxx
xx*+.....44..2..xx...xxxxxxxx.......2.1.2...xxxxxxxx
xxdx....423.342.xxx.33xxxxxxxxxx...1.....1...xxxxxxx
xxxxx..4...324xxxxxxx3..xxxxxxxxx............xxxxxxx
xxxxxxxG4.2G...xxxxxxxx...xxxxwwxx2........2xxxxxxxx
xxxxxxxxxxxx....xxxxxxxx....xxxwwxx1x....x1xxxxxxxxx
xxxxxxxxxxxxxx...xx.xxxxxx....xxwwxxxx..xxxxxxxxxxxx
xxxxxxxxxxxx....xx...xxxxxxx...xxwwxxx..xxxwwxxxxxxx
xxxxxlm..xxx..xxx..x..xxxxxxxx..xwwxx..xxxwwxxxxxxxx
xxxxxxxx+xxxx.....xxx.....xxx..xxwxx..xxxwwxxxxxxxxx
xxxxx444544xxx...xxxxx........xxxwwx...xxwwxxxxxxxxx
xxxx.444444.xxxxxxxxx..3..3...xxxwwxx...xxwwxxxxxxxx
xxx..xgdegx..xxxxxx*%...3.....xxxwwxxx.66xwwxxxxxxxx
xx...xxffxx...xxxxx*%....3.3..xxwwxxxx6.6xxwwxxxxxxx
xx....xxxx...xxxxxxxxx.......xxxwwxxx...xxxwwxxxxxxx
xxxx.........xxxxxxxxxxx...xxxxwwwxxx...xxxwwwxxxxxx
xxxx...7....xxxxxxxxxxxxx..xxxwwwxxx.....xxxwwxxxxxx
xxxxx------xxxxxxxxxxxxxxxx..xxwwxx...A...xxxwxxxxxx
xxxxxx----xxxxxx...xxxxxxxx...xwwxx.......xxwwxxxxxx
xxxxxx---xxxx...xx...xx.....xxxwwxxx..<..xxxwwxxxxxx
xxxxxxx.......xxxxxx....xxxxxxwwwxxxx...xxxwwwxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP
# Foes: ice & blue devils, white imps & ufetubi, an ice statue.
# Loot: weapons and/or armour.
NAME: ice_cave_small_04
TAGS: ice_cave no_item_gen no_monster_gen no_pool_fixup
ORIENT: encompass
WEIGHT: 8
NSUBST: . = 9:1 / 1:2 / *:.
SHUFFLE: Qq / Zz / Nn / Bb / Mm
SUBST: Q=2, Z=2, N=., B=., M=.
SUBST: q=!, z=!, n=., b=., m=.
# Replaces '!'s with fog generators, then makes them floor.
: place_fog(_G, "freezing vapour", 100)
KFEAT: ! = .
# Couple of more random, milder fog generators.
NSUBST: . = 3:! / *:.
: place_fog(_G, "freezing vapour", 30)
KFEAT: ! = .
# The random ones weren't placed near the entrance, though.
SUBST: - = .
# Still more fog, in the water this time.
NSUBST: w = 3:! / *:w
: place_fog(_G, "freezing vapour", 50)
KFEAT: ! = w
{{
ice_cave_colours(_G)
dgn.set_random_mon_list("white imp w:35 / ufetubus w:35 / blue devil w:20 / \
ice devil / nothing")
ice_cave_milestone(_G)
}}
MONS: white imp / ufetubus
MONS: ice devil / blue devil w:3
MONS: ice statue
MONS: blue devil
SHUFFLE: dg, efh
SUBST: e = ed
ITEM: battleaxe ego:freezing / executioner's axe ego:freezing / \
glaive ego:freezing / halberd ego:freezing / quick blade ego:freezing / \
great sword ego:freezing / triple sword ego:freezing / \
giant spiked club ego:freezing / demon trident ego:freezing
ITEM: battleaxe ego:freezing good_item / executioner's axe ego:freezing good_item /\
glaive ego:freezing good_item / halberd ego:freezing good_item / \
great sword ego:freezing good_item / quick blade ego:freezing good_item /\
triple sword ego:freezing good_item / demon trident ego:freezing good_item /\
giant spiked club ego:freezing good_item
ITEM: demon whip good_item / demon blade good_item / demon trident good_item
ITEM: cap ego:cold_resistance / pair of gloves ego:cold_resistance / \
cloak ego:cold_resistance / buckler ego:cold_resistance / \
pair of boots ego:cold_resistance
ITEM: crystal plate mail ego:cold_resistance / \
troll leather armour ego:cold_resistance / \
ice dragon armour good_item / robe ego:resistance / \
naga barding ego:cold_resistance good_item w:5 / \
centaur barding ego:cold_resistance good_item w:5 / \
crystal plate mail ego:cold_resistance good_item / \
troll leather armour ego:cold_resistance good_item
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxx....xxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxx........xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxx...xxx....xxxxxxxxx
xxxxxxxxxxxxxxxxxxxxx..xxx4xxx...xxxxxxxx
xxxxxx...xxxxxxxxxxx...xx44..xxxx..xxxxxx
xxxx..1..1...xxxxxxxx...xx.....xx...xxxxx
xxx.1......1...xxxxxxx........dxxx..xxxxx
xxx..........1..xxxx.....xx..dxx...xxxxxx
xxx..1..1..1....xx.....xxxxxxxx...xxxxxxx
xxxx................xxxxxxxxxx...xxxxxxxx
xxxxx.........x...xxxxxxxxxxq..xxxxxxxxxx
xxxxx1x....x3xxxxxxxxxx....Q..xxxxxxxxxxx
xxxxxxxx..xxxxwwwxxx......QqQ..xxxxxxxxxx
xxxxxxxx..xxxwwxxx....xx.........xxxxxxxx
xxxxxxx..xxxwwxx.....xx..xxxx..z...xxxxxx
xxxxxx..xxxwwxx4.b.x.....N..x...Z...xxxxx
xxxxxx...xxwwxx..B.xxx..n.N.xx.ZzZ..4xxxx
xxxxxxx...xxwwx4BbB..xx..N...xx.......xxx
xxxxxxxx.-.xwwxx.........x.n........4xxxx
xxxxxxxx---xxwwxx...xxx..x..xxx.....xxxxx
xxxxxxx---xxwwwwxxxxx....x.....x..xxxxxxx
xxxxxxx---xxwwwwwwx.....mx.....xxxxxxxxxx
xxxxxx-----xxwwwwwxx.xx.M.m..xxxxxxxxxxxx
xxxxx---A---xxwwwccccc.M.M.cccccxxxxxxxxx
xxxxx-------xwwwwc...ccc.ccc...cxxxxxxxxx
xxxxxx--<--xxwwwwc.e.........f.cxxxxxxxxx
xxxxxxx---xxwwwwwc...cc*|*cc...cxxxxxxxxx
xxxxxxxxxxxxxxxxxcccccccccccccccxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP
############################################################################
# sprawling caverns
#
# A winding, tight cavern with a hard challenge at the end. You can always
# go back to the beginning to retreat.
# The caverns are more rare than the caves.
NAME: ice_cave_caverns_01
TAGS: ice_cave no_item_gen no_monster_gen no_pool_fixup
WEIGHT: 5
ORIENT: encompass
# A bit of layout randomization.
: if crawl.coinflip() then
SUBST: ' = x
SUBST: - = .
SUBST: _ = .
: else
SUBST: ' = .
SUBST: - = x
SUBST: _ = w
: end
: ice_cave_colours(_G)
: ice_cave_milestone(_G)
# Two different populations: undead/demon and natural/giant.
: if crawl.coinflip() then
: ice_cave_random_monster_list_undead_demon(_G)
: ice_cave_caverns_undead_demon_monster_set(_G)
ITEM: cloak ego:fire_resistance good_item / wizard hat good_item / \
pair of gloves good_item / pair of boots good_item / nothing
ITEM: book of ice / book of unlife / staff of cold / staff of death / \
nothing w:30
ITEM: ring of ice / ring of protection from fire / ring of life protection / \
wand of cold / wand of draining / nothing
: else
: ice_cave_random_monster_list_natural_giant(_G)
: ice_cave_caverns_natural_giant_monster_set(_G)
ITEM: animal skin good_item ego:fire_resistance / \
battleaxe good_item ego:freezing w:4 / \
glaive good_item ego:freezing w:4 / \
great sword good_item ego:freezing w:2 / nothing
ITEM: book of ice / \
crossbow ego:frost good_item no_uniq / \
longbow ego:frost good_item no_uniq / nothing w:20
ITEM: ring of ice / ring of protection from fire / wand of cold / \
arrow ego:ice q:25 / bolt ego:ice q:20 / nothing
: end
ITEM: any wand / any potion w:5 / any scroll w:5
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxx.xxxxxxxxxxx-'xxxxxxxxxxwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx....xxxxxxxxx....xxxxxxxxxwwwxxxx*xxx$$xxxxxxxx...xx...xxxxxxxxgxxxx
x...A.xxxxxx....xx....xxxxxxxwwwwx*x*xxx$$x-.x...xx...xx...xxxxxgxgxxx
x.<....'-....xxxxxxx...xxxxxwwwwxxx*x.xxxx.'x..xxxxxxxxxx....xxxx.xxxx
xx..xx....xxxxxxxx1111xxxxwwwwwwxxxxxx...xxxxx..xxxxxxxxxx..3..x.xxxxx
xxxxxxxxxxxxxxx....xxxxxxxxwwwwxxxx11..x...x..xxxxwwwxxxxxx.....xxxxxx
xxwxxwxwxxx.....xxxx______xxwwxxxx51xxxxxx..xxxwwwwxwxxxxx..6xxxxxxxxx
xxxwxxxxx..xxxxxx___xx_____xxxx...xxxxwxxxxxxwwwxxxxxxxxx.66xxxwwwxxxx
xwxxxx....xxwxx__xxxxxxxx___xx..xxxwwwxwxxxwwwxxxxxxxx....xxxxwwwxxxxx
xxxx...xxxxwxx_xxxx....xxx__xxx..xxxxxwwwwwwxxxx....x...xxxxwwwxwwwxxx
xxx..xxxwwwwx-xxx...xx...xxx_xxx..xxwwwwwxxxx...xx....xxxwwwxxxxxxwwxx
x...xxwwwwwwxx-...x.xxxx...xx_x..xxxxwwwwxxx..xxxxxxxxxwxxxxxx.xxxxwxx
x..xxxwwwwwxxx141xxxgxxxx...x_xx.11xxxwwwwxxx...xxxwwwwxx...x.x.xxxxxx
xx..xxxwwwwxx...xxxgxxx...xxx_xxxx51xxxwwwxxxx..1.xxxwwx.U...xxx..xxxx
xxx..xwwwwxxxx....xxxx5.xxxwxx_xx...xxxxxwwwxxxx.1.5xxxxx.x.xxx..xxxxx
xx..xxxwwwwxx'x.xxxxx5..5xxwwxx_xxx1.xxxxxwwxxxxx5415.xxxxxx.xx...xxxx
xx...xxwwwxx..'xxxxwxx15.5xxwwxx_xxx51xxxxwwxxxxxx5.41.xxxx..xxx454xxx
xxx..-xxxxx..xxxwxwwwxxx5.1xxwwxx_--x1xxxxxwwwxxxxxx.5..x...xxx5.7.5xx
xxx...-xx-..xxxwxwwxxwxx-x1.xxwwxx'''xxxxxxwwwwxxxxxxx'...xxxxxx5.5xxx
xxx...x--xx..1xxxxxwxx--x-..'xxwx'x'xxxxxwxxwwwwxxxx*.xxxxx.xxx..xxx|x
xxx222x''x''x..xx1xxx----xxxx'xx'''xxxxwxxxwwwwwwxxxx*xxxx.<.xxx.$defx
xxxx'.'xx'xx1.x.1...2xxxxxxxxx'''xxxxwxxwwxwwwwwwwwxxx--........x|fedx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'xxxxwxwwwxwwwwwxwxxxxxxxxxx.xxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP
NAME: ice_cave_caverns_02
TAGS: ice_cave no_item_gen no_monster_gen no_pool_fixup
WEIGHT: 5
ORIENT: encompass
# Two different populations: undead/demon and natural/giant.
# The fog generators are placed differently - the natural population
# doesn't have enough cold resistance for many clouds. The ';' placeholder
# symbol gives the natural monsters some safety padding from generator
# placement.
: if crawl.coinflip() then
: ice_cave_random_monster_list_undead_demon(_G)
: ice_cave_caverns_undead_demon_monster_set(_G)
ITEM: cloak ego:fire_resistance good_item / wizard hat good_item / \
pair of gloves good_item / pair of boots good_item / nothing
ITEM: book of ice / book of unlife / staff of cold / staff of death / \
nothing w:30
ITEM: ring of ice / ring of protection from fire / ring of life protection / \
wand of cold / wand of draining / nothing
# Take out ';' safety padding.
SUBST: ; = .
# Place the fog generators:
SUBST: . = .:40 !:1
: place_fog(_G, "freezing vapour", 25)
KFEAT: ! = .
: else
: ice_cave_random_monster_list_natural_giant(_G)
: ice_cave_caverns_natural_giant_monster_set(_G)
ITEM: animal skin good_item ego:fire_resistance / \
battleaxe good_item ego:freezing w:4 / \
glaive good_item ego:freezing w:4 / \
great sword good_item ego:freezing w:2 / nothing
ITEM: book of ice / \
crossbow ego:frost good_item no_uniq / \
longbow ego:frost good_item no_uniq / nothing w:20
ITEM: ring of ice / ring of protection from fire / wand of cold / \
arrow ego:ice q:25 / bolt ego:ice q:20 / nothing
# Place the fog generators. The predetermined ones are mild.
: place_fog(_G, "freezing vapour", 5)
# Place a few random, mild ones.
SUBST: . = .:60 !:1
: place_fog(_G, "freezing vapour", 10)
KFEAT: ! = .
SUBST: ; = .
: end
ITEM: any wand / any potion w:5 / any scroll w:5
# The ':' provides fog-free zone near the entrance.
SUBST: : = .
# Some layout randomization.
: if crawl.coinflip() then
SUBST: '=x , -=.
: else
SUBST: '=. , -=x
: end
: ice_cave_colours(_G)
: ice_cave_milestone(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx::xxwwwwxxx.x.'x-;x5;;5xxwwwwwxxx1;;;x;Wxxxxxx15415;xxxxxx......xxxx
xx:<:xwwwwxx...x.x;x;x15;5xxwwxxx''';;x;xxWWxx15xx5;41;xxxx..xxx...xxx
xxx::xxwwxx..xxx-;'xx;xx5;1xxxx'''xxx.-xxxxWWWxxxxxx;;;;x...xxx..U..xx
xxx:A:xxwx..xxxwxxxwwwwxxx1;x'''xxwwx---xxxxWWwxwwwxxx'...xxxxxx...xxx
xxx:::xwwxx;;;xxxxxwwwwwxx;;'xxxxxxxxxx--xxwwwwwwwxx*.xxxxxxxxx..xxxxx
xxx:::xxwxxxx;;xx1-'xxwwxxx--xxxxx'''x--xxwwwwwwwxx.x*xxxx..xxxx..xxxx
xxxx:11xwwxx1;x;1;1;2xxwx---xx.*.*.xx..xxxwwwwwwwwww-x-x..xx.x..xxxxxx
xxx11:xxwwwxxx1xxxxx1;xxxx--x.g.T.g.xxx;;xwwwwwwwwx-xx..xxxxx.xxxxxxxx
xxxx::xwwwwwxx2;;1x11;;xxxx-...*.*..xx;;;xxwwwwwwx'...xxxxxxxxxxxxxxxx
xxxxx:xxwxxxxxxxxx;xxx;;xwxx...xxxxxxxxx;;xxwwwxxx.-xxxxxxxxxxxxxxxxxx
xxxxx;;xxxx.x....xxxx;;;xxwxxx.-xwwwxxx1xxxxwwwxx..xxxxxxxxxxxxxxxxxxx
x*x$xx..xx.*..-'..xxxxx..xxx''.-xwwwx15xxxwwwwxxxx;;xxxxxxxxxxxxxxxxxx
xx$x.xx..xx..xxxx..xwwxxx;;''xx--xxxx115xxwwwwwxxxx;;;xxxxxxxxxxxxxxxx
x$x..x.!..xx..xxx..xwwwwxx--xxxx-xx;1;xxxwwwwwwxxxxx;;;;xxxxxxxxxxxxxx
xx.xx;x;;xxx..xx...xxwwwwxx1;xxxx.;;xxxxxwwwwwwxxxxxx;2;2;xxxxxxxxxxxx
xxxxxx;;xxxx...xx.3.xxwwxx'-;1x'''xxxxxwwwwwwwwxxxxxx;54;2;xxxxxxxxxxx
xxxxx;;xxxx...xxxx...xxxx;;x;;''xxxxxxwwwwwwwxxxx$$x;2475;;;xxxxxxxxxx
xxxx5;5xx...xxxx.x.xxxxx..;x;xxxxxxwwwwwwwwxxxxdf$$;;;;;;;xx;xxxxxxxxx
xxxx;;xx;..xxwwxx|x.xx...xx;xxxxxwwwwwwwwwwwxxed|$$$;;;xxxxxx..xxxxxxx
xxxx122;;.xxwwwwxx....xxxxxxxxxxwwwwwwwwwwwwwxxfe|$$$$.xxxxxxxx....xxx
xxxxx1;;xxxwwwwwxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxx...<x
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP
NAME: ice_cave_caverns_03
TAGS: ice_cave no_item_gen no_monster_gen no_pool_fixup
WEIGHT: 5
ORIENT: encompass
# Two different populations: undead/demon and natural/giant.
# Different fog generator generation according to population,
# as the natural monsters can't stomach the clouds.
: if crawl.coinflip() then
: ice_cave_random_monster_list_undead_demon(_G)
: ice_cave_caverns_undead_demon_monster_set(_G)
ITEM: cloak ego:fire_resistance good_item / wizard hat good_item / \
pair of gloves good_item / pair of boots good_item / nothing
ITEM: book of ice / book of unlife / staff of cold / staff of death / \
nothing w:30
ITEM: ring of ice / ring of protection from fire / ring of life protection / \
wand of cold / wand of draining / nothing
# Place fog generators.
SUBST: 3 = 3!
: place_fog(_G, "freezing vapour", 25)
KFEAT: ! = .
SUBST: ; = .
SUBST: . = .:100 !:1
: place_fog(_G, "freezing vapour", 15)
KFEAT: ! = .
: else
: ice_cave_random_monster_list_natural_giant(_G)
: ice_cave_caverns_natural_giant_monster_set(_G)
ITEM: animal skin good_item ego:fire_resistance / \
battleaxe good_item ego:freezing w:4 / \
glaive good_item ego:freezing w:4 / \
great sword good_item ego:freezing w:2 / nothing
ITEM: book of ice / \
crossbow ego:frost good_item no_uniq / \
longbow ego:frost good_item no_uniq / nothing w:20
ITEM: ring of ice / ring of protection from fire / wand of cold / \
arrow ego:ice q:25 / bolt ego:ice q:20 / nothing
# Place fog generators.
SUBST: 3 = 3!
: place_fog(_G, "freezing vapour", 20)
KFEAT: ! = .
SUBST: . = .:100 !:1
: place_fog(_G, "freezing vapour", 8)
KFEAT: ! = .
SUBST: ; = .
: end
ITEM: any wand / any potion w:5 / any scroll w:5
# The ':' provides a fog-free zone near the entrance.
SUBST: : = .
# A bit of layout randomization for the middle part.
: if crawl.coinflip() then
SUBST: '=x , -=.
: else
SUBST: '=. , -=x
: end
: ice_cave_colours(_G)
: ice_cave_milestone(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.x.xxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.U.x$xxxxxxxx...xx;;;xxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwxxx.xxx$x..x...xx...xx;55xxxxx
xxxxxxxxxxxxxxxxxxxxxxxxwwwwxWWWxxxxxxx..x..xxxxxxxxxx;554xxx
xxxxxxxxxxxxxxxxxxxxxxxxxwxxxxxWwWxWW.xxxxx..xxwwwwwwxx;2525x
xxxxxxxxxxxxxxxxxxxxxwwxxxxxxxxxWWWWxW..xx..xxwwwwwwwwxx427;x
xxxxxxxxxxxxxxxxxxxwwwwwxxxxxxxWWxwWwxx...xxxwwwwwwwxxx;;5xxx
xxxxxxxxxxxxxxxxxxxxwwwwwxxx.WWxxxxwwwxxxxxwwwwwwxxxxx;;;xxxx
xxxxxxxxxxxxxxxxxxxxxxwwwxx."xxxwwwwwxwwxwwwxxxxxxx....xxxxxx
xxxxxxxxxxxxxxxx;...xxxwwwxx..xxxwwwwwwwwwwxx<..!x...xx.xfxxx
xxxxxxxxxxxxxx;;;xx...xxxwwxx..xxxxwwwwwwwwxxxx....xxxxxex|xx
xxxxxxxxxxxx;44x;xxxx...xxwx..xxxxxxwwxwxwwwwxxxxxxxxxxdx$xdx
xxxxxxxxxxx;4;xxx$xxxx;;;xwxx"..xxxxxwwwwwxwwwxxxxxxxxxx|xexx
xxxxxxxxxx;;;xxx$xxx;;;xxxwwxxx..xxxwwwxxwwwwxwxxxxxxxxxxfxxx
xxxxxxxxxxx;;..xxxx5;xxxwwwwxx...xxxxxwwwwwwwxxxxxxxxxxxxxxxx
xxxxxxxxxx.x.xxxxx51;5xxwwwwxxxx..xxxxxwwxxxxxxxxxxxxxxxxxxxx
xxxxxxxxx;;;xxxxxxx15;5xxwwxxx'''".xxxxwwxxxxxxxxxxxxxxxxxxxx
xxxxxxxx;;xxxxxxxxxxx5;1xxxx''xxxx.-xxxxwwwxxxxxxxxxxxxxxxxxx
xxxxxxx;1xxxxxxxxxxxxxx;;x'''xxxxx---xxxwwwwxxxxxxxxxxxxxxxxx
xxxxxxxx;11xxxxxxxxxxxx;;''xxxxx'xxx--xxxwwwwxxxxxxxxxxxxxxxx
xxxxxxxxxx1;xx.xxxxxxxxx--xxxxx''''--xxxwwwwwwxxxxxxxxxxxxxxx
xxxxxxxxx;;x;;....xxxx---xx.*.*.xx..xxxxwwwwwwwwxxxxxxxxxxxxx
xxxxxxxxxxx;xxxxx.;xxxx--x.g.T.g.xxx..xxxwwwwxxxxxxxxxxxxxxxx
xxxxxxxxxxx2;;2x;;;;xxxx-...*.*..xx.;;xxwwwwwwxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxx;xxx;1xxxx...xxxxxxxxx;;xxwwwxxxxxxxxxxxxxxxxx
xxxxxxxx.x;;;'xxxx;1;xxxxxx.-xxxxxxx1xxxxwwwxxxxxxxxxxxxxxxxx
xxxxxxx;*66-x..xxxxx11xxxx'.--x---15xxxwwwwxxxxxxxxxxxxxxxxxx
xxx::<xx;;xxxx..xxxxxx;;''xx-x-xxx115xxwwwwwxxxxxxxxxxxxxxxxx
xxA::xxxx;.xxx..xxxxxxx--xxxx-xx.11xxxwwwwwwxxxxxxxxxxxxxxxxx
xx::::xxx;,xx...xxxxxxxx1;xxx-;;;xxxxxwwwwwwxxxxxxxxxxxxxxxxx
xx:::xxxx;;;xx.3.xxxxxxxx;1x'''xxxxxwwwwwwwwxxxxxxxxxxxxxxxxx
xx::xxxx21;xxxx...xxxx..x;;''xxxxxxwwwwwwwxxxxxxxxxxxxxxxxxxx
x:::xx;12xxxx.x.xxxxx...x;xxxxxxwwwwwwwwxxxxxxxxxxxxxxxxxxxxx
x::xx;;;xxxxxx|x.xx...xx;xxxxxwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxx
x:::..;xxxxxxxx....xxxxxxxxxxwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxx
xx:..xxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP