1############################################################################### 2# icecave.des: All maps related to the Ice Cave Portal. 3# 4# <<1>> Entry vaults. 5# <<2>> Ice Cave maps. 6# 7############################################################################### 8 9{{ 10 11crawl_require("dlua/dungeon.lua") 12 13--[[ 14Setup function for ice cave entry vaults. Create portal timer marker, determine 15ice cave difficulty, and set ice cave chance, and define the ice cave entry 16feature. 17 18@tab e The map environment. 19]] 20function ice_cave_portal(e) 21 local timeout_turns = crawl.random_range(600, 800) 22 23 local messager = timed_msg { 24 initmsg = { "You feel a wave of frost pass over you.", 25 "There is an entrance to an ice cave on this level. " 26 .. "Hurry and find it before the portal melts!" }, 27 finalmsg = "The crackling of melting ice is subsiding rapidly.", 28 verb = 'crackling', 29 noisemaker = 'melting archway', 30 ranges = { 31 { 5000, 'faint ' }, { 4000, '' }, 32 { 2500, 'steady ' }, { 1500, 'quick ' }, 33 { 0, 'loud ' } 34 } 35 } 36 37 dgn.persist.ice_cave_hard = hard_ice_cave_difficulty() 38 39 e.lua_marker('O', 40 timed_marker { 41 disappear = "The archway melts and disappears.", 42 entity = 'archway', 43 turns = timeout_turns, 44 single_timed = true, 45 floor = "expired_portal", 46 feat_tile = "dngn_portal_ice_cave_gone", 47 msg = messager }) 48 e.tags("uniq_icecv chance_icecave") 49 e.chance(500) 50 e.kfeat("O = enter_ice_cave") 51 e.colour("a = white") 52 e.kfeat("a = x") 53 e.rtile("a = wall_ice_block") 54 e.colour(".1234 = blue") 55 e.ftile(".12345O+^ = floor_ice") 56end 57 58--[[ 59Determine if we're placing a hard difficulty ice cave map. Possible depths for 60easy ice caves are D:11-13, Lair, Orc. Hard ice caves are placed in D:14-15, 61Elf and the Lair roulette branches. This function must be updated if the depth 62range of ice cave changes, which is set by the default-depth statement of the 63entry vault section or by the entry maps themselves. 64 65treturn bool True for hard difficulty, false for easy. 66]] 67function hard_ice_cave_difficulty() 68 69 if you.in_branch("D") and you.depth() < 14 or you.in_branch("Lair") or 70 you.in_branch("Orc") then 71 return false 72 end 73 74 return true 75end 76 77--[[ 78Define an Ice Cave exit feature on '<' and set ice cave thematic terrain 79descriptions. Should be called after all terrain substitutions are performed. 80 81@tab e The map environment. 82]] 83function ice_cave_appearance(e) 84 e.kfeat("< = exit_ice_cave") 85 86 -- Alter short feature descriptions for all ice cave destination vaults. 87 e.set_feature_name("rock_wall", "ice covered rock wall") 88 e.set_feature_name("stone_arch", "ice choked empty arch of ancient stone") 89 e.set_feature_name("shallow_water", "Some ice crusted shallow water") 90 e.set_feature_name("deep_water", "Some ice crusted deep water") 91end 92 93--[[ 94Place a freezing vapour generator on the '!' glyph via a lua marker. 95 96@tab e The map environment. 97@number[opt=12] size The number of squares upon which the cloud generator 98 will place clouds. 99@string[opt="!"] glyphs The glyphs on which to place the marker. 100]] 101function place_freezing_vapour_machine(e, size, glyphs) 102 if size == nil then 103 size = 12 104 end 105 106 if glyphs == nil then 107 glyphs = "!" 108 end 109 110 e.lua_marker(glyphs, 111 fog_machine { pow_max = 20, cloud_type = "freezing vapour", 112 delay_min = 50, delay_max = 250, size = size, 113 start_clouds = 1, excl_rad = -1 }) 114end 115 116--[[ 117Returns monster simulacrum definition strings according to three types, 118"mocking", "savage", and "cruel", that are modified by ice cave difficulty. 119The "mocking" set tends to resemble player species, the "savage" set contains 120beastly simulacrum, and the "cruel" set contains particularly dangerous 121simulacrum in terms of speed, attack strength, or number of attacks. 122 123@treturn table A table of strings with keys "mocking", "savage", and "cruel". 124]] 125function simulacrum_monsters() 126 local mons = {} 127 if dgn.persist.ice_cave_hard then 128 mons["mocking"] = "deep troll simulacrum / minotaur simulacrum \ 129 / entropy weaver simulacrum / spriggan defender simulacrum" 130 else 131 mons["mocking"] = "two-headed ogre simulacrum / troll simulacrum \ 132 / naga simulacrum / spriggan simulacrum" 133 end 134 135 if dgn.persist.ice_cave_hard then 136 mons["savage"] = "lindwurm simulacrum / dire elephant simulacrum \ 137 / alligator simulacrum / harpy simulacrum / anaconda simulacrum" 138 else 139 mons["savage"] = "wolf simulacrum / elephant simulacrum \ 140 / polar bear simulacrum / cane toad simulacrum \ 141 / death yak simulacrum" 142 end 143 144 if dgn.persist.ice_cave_hard then 145 mons["cruel"] = "ettin simulacrum / hydra simulacrum \ 146 / golden dragon simulacrum / caustic shrike simulacrum" 147 else 148 mons["cruel"] = "dire elephant simulacrum / harpy simulacrum \ 149 / anaconda simulacrum / entropy weaver simulacrum" 150 end 151 152 return mons 153end 154 155--[[ 156Define undead and demonic monsters on glyphs 1 through 8 using KMONS, with the 157monster types modified by ice cave difficulty. The glyph definitions are 158roughly in order of difficulty. Glyph 3 defines a statue monster, which is ice 159statue for easy ice caves and obsidian statue for hard ice caves. The glyph 6 160monster is a "miniboss" that should be used sparingly in easy ice caves. The 161"boss" monsters are on glyphs 7 and 8, with 7 being appropriate for a 2+ size 162boss group and 8 being appropriate for a solo boss on easy ice caves or a small 163group for hard ice caves. 164 165Also set a random monster list for shadow creatures purposes containing 166monsters on glyphs 1,2,4, and 5, with total weights for each glyph having 167ratios 18:6:2:1. 168 169@tab e The map environment. 170@string[opt] reaper_glyphs If non-nil, a KMONS will be defined on the given 171 glyphs for a reaper with a freezing scythe and rC gear, the latter getting 172 it to rC+++ and hence freezing vapour immunity. 173]] 174function ice_cave_undead_demon_monster_set(e, reaper_glyphs) 175 simul = simulacrum_monsters() 176 177 local reaper_equip = " ; scythe ego:freezing" 178 -- Make sure this reaper has rC+++ so it doesn't die in freezing vapour. 179 if reaper_glyphs ~= nil then 180 reaper_equip = reaper_equip .. " . robe ego:cold_resistance" .. 181 " . ring of protection from cold | ring of ice" 182 end 183 184 if dgn.persist.ice_cave_hard then 185 e.kmons("1 = " .. simul["mocking"] .. " / ice devil") 186 e.kmons("2 = " .. simul["savage"] .. " / freezing wraith") 187 e.kmons("3 = obsidian statue") 188 e.kmons("4 = freezing wraith") 189 e.kmons("5 = " .. simul["cruel"]) 190 e.kmons("6 = bog body / white very ugly thing w:2") 191 e.kmons("7 = blizzard demon") 192 if reaper_glyphs ~= nil then 193 e.kmons(reaper_glyphs .. " = reaper" .. reaper_equip) 194 end 195 e.kmons("8 = ice fiend") 196 197 e.set_random_mon_list( 198 -- 144 * 5 = 720 total weight for tier 1. 199 dgn.random_entry_arg(simul["mocking"] .. " / ice devil", 200 "w:144") .. 201 -- 48 * 5 = 240 total weight for tier 2. 202 " / " .. dgn.random_entry_arg(simul["savage"], "w:48") .. 203 -- 80 weight for tier 4. 204 " / freezing wraith w:80" .. 205 -- 40 total weight for tier 5. 206 " / " .. simul["cruel"]) 207 else 208 -- Default case, meaning glyph 8 and no rC gear. 209 if reaper_glyphs == nil then 210 reaper_glyphs = "8" 211 end 212 213 e.kmons("1 = " .. simul["mocking"] .. "/ white imp / ufetubus") 214 e.kmons("2 = " .. simul["savage"]) 215 e.kmons("3 = ice statue") 216 e.kmons("4 = ice devil") 217 e.kmons("5 = " .. simul["cruel"]) 218 e.kmons("6 = freezing wraith / white ugly thing w:2") 219 e.kmons("7 = bog body") 220 e.kmons(reaper_glyphs .. " = reaper" .. reaper_equip) 221 222 e.set_random_mon_list( 223 -- 120 * 6 = 720 total weight for tier 1. 224 dgn.random_entry_arg(simul["mocking"] .. " / white imp / ufetubus", 225 "w:120") .. 226 -- 48 * 5 = 240 total weight for tier 2. 227 " / " .. dgn.random_entry_arg(simul["savage"], "w:48") .. 228 -- 80 weight for tier 4. 229 " / ice devil w:80" .. 230 -- 40 total weight for tier 5. 231 " / " .. simul["cruel"]) 232 end 233end 234 235--[[ 236Define natural monsters on glyphs 1 through 8 using KMONS, with the monster 237types modified by ice cave difficulty. The glyph definitions are roughly in 238order of difficulty. Glyph 3 defines a statue monster, which is ice statue for 239easy ice caves and orange crystal statue for hard ice caves. The glyph 6 240monster is a "miniboss" that should be used sparingly in easy ice caves. The 241"boss" monsters are on glyphs 7 and 8, with 7 being appropriate for a 2+ size 242boss group and 8 being appropriate for a solo boss on easy ice caves or a small 243group for hard ice caves. 244 245Also set a random monster list for shadow creatures purposes containing 246monsters on glyphs 1,2,4, and 5, with total weights for each glyph having 247ratios 18:6:2:1. 248 249@tab e The map environment. 250]] 251function ice_cave_natural_monster_set(e) 252 if dgn.persist.ice_cave_hard then 253 e.kmons("1 = polar bear / rime drake") 254 e.kmons("2 = white ugly thing") 255 e.kmons("3 = orange crystal statue") 256 e.kmons("4 = ice dragon") 257 e.kmons("5 = ironbound frostheart") 258 e.kmons("6 = white draconian ; " .. 259 dgn.random_item_def({["scimitar"] = 2, ["halberd"] = 2, 260 ["broad axe"] = 1, ["morningstar"] = 2}, 261 "freezing", nil, "|") .. " . cloak") 262 e.kmons("7 = frost giant") 263 e.kmons("8 = shard shrike") 264 265 -- Weights applied by monster difficulty tiers in a way similar to 266 -- ice_cave_undead_demon(). 267 e.set_random_mon_list("polar bear w:15 / rime drake w:15 \ 268 / ice dragon / ironbound frostheart w:5") 269 else 270 e.kmons("1 = wolf / yak") 271 e.kmons("2 = polar bear") 272 e.kmons("3 = ice statue") 273 e.kmons("4 = rime drake") 274 e.kmons("5 = death yak") 275 e.kmons("6 = white ugly thing") 276 e.kmons("7 = ironbound frostheart") 277 e.kmons("8 = frost giant") 278 279 e.set_random_mon_list("wolf w:30 / yak w:30 / polar bear w:15 \ 280 / rime drake / death yak w:5") 281 end 282end 283 284--[[ 285Define types of thematic armour loot on two KITEMs using the supplied glyphs. 286The first aux armour and buckler, the second being "light" armour and a kite 287shield, and the third being "heavy" armour and a tower shield. All have some 288kind of cold resistance. For hard ice caves, the items are all good_item. 289 290@tab e The map environment. 291@string[opt="def"] glyphs A string of three glyphs to use for the three KITEM 292 statements. 293]] 294function ice_cave_armour_loot(e, glyphs) 295 if glyphs == nil then 296 glyphs = "def" 297 end 298 299 local coldres = " ego:cold_resistance ident:type" 300 local res = " ego:resistance ident:type" 301 302 local quality = "" 303 if dgn.persist.ice_cave_hard then 304 quality = " good_item" 305 end 306 307 e.kitem(glyphs:sub(1,1) .. " = cloak" .. coldres .. quality .. " w:5" .. 308 " / scarf" .. res .. " w:5" .. " / hat" .. quality .. " w:5" .. 309 " / helmet" .. quality .. " w:5" .. " / pair of gloves" .. quality .. 310 " / pair of boots" .. quality .. " / buckler" .. coldres .. quality) 311 e.kitem(glyphs:sub(2,2) .. " = robe" .. res .. quality .. 312 " / leather armour" .. res .. quality .. 313 " / scale mail" .. coldres .. quality .. " / skin of zhor w:2" .. 314 " / kite shield" .. coldres .. quality) 315 e.kitem(glyphs:sub(3,3) .. " = ice dragon scales" .. quality .. 316 " / chain mail" .. coldres .. quality .. 317 " / plate armour" .. coldres .. quality .. 318 " / crystal plate armour" .. coldres .. quality .. 319 " / tower shield" .. coldres .. quality) 320end 321 322--[[ 323Define weapon types on two KITEMs using the supplied glyphs, both of which have 324the freezing ego. The first is any weapon, and the second is a large set of 325upper-tier weapons. Both weapons definitions include launchers, and the second 326includes small weights for the unrands Frostbite and Maxwell's thermic engine. 327For easy ice caves, the first definition makes weapons that are 50% good_item, 328and for hard ice caves, both definitions are always good_item. 329 330@tab e The map environment. 331@string[opt="gh"] glyphs A string of two glyphs to use for the two KITEM 332 statements. 333]] 334function ice_cave_weapon_loot(e, glyphs) 335 if glyphs == nil then 336 glyphs = "gh" 337 end 338 339 local ego = " ego:freezing ident:type" 340 if dgn.persist.ice_cave_hard then 341 e.kitem(glyphs:sub(1,1) .. " = any weapon" .. ego .. " good_item") 342 else 343 e.kitem(glyphs:sub(1,1) .. " = any weapon" .. ego .. 344 " / any weapon" .. ego .. " good_item") 345 end 346 347 -- Some higher-end weapons that work well with the freezing ego. 348 local weapons = { 349 ["morningstar"] = 10, ["eveningstar"] = 5, ["demon whip"] = 5, 350 ["great mace"] = 10, ["giant club"] = 5, ["giant spiked club"] = 5, 351 ["demon trident"] = 5, ["halberd"] = 10, ["glaive"] = 10, 352 ["bardiche"] = 5, ["scimitar"] = 10, ["demon blade"] = 5, 353 ["double sword"] = 5, ["maxwell's thermic engine"] = 2, 354 ["great sword"] = 10, ["triple sword"] = 5, ["lajatang"] = 10, 355 ["broad axe"] = 10, ["battleaxe"] = 10, ["frostbite"] = 2, 356 ["executioner's axe"] = 5, ["fustibalus"] = 10, ["longbow"] = 10, 357 ["arbalest"] = 5, ["triple crossbow"] = 5 358 } 359 local quality = "" 360 if dgn.persist.ice_cave_hard then 361 quality = " good_item" 362 end 363 e.kitem(glyphs:sub(2,2) .. " = " .. 364 dgn.random_item_def(weapons, "freezing", "ident:type" .. quality)) 365end 366 367--[[ 368Define one item slot containing ice or water themed magical items, including 369spellbooks, manual, staff of cold, rC jewellery (good_item quality for hard ice 370caves), wand of iceblast, phial of floods, and condenser vane. 371 372@tab e The map environment. 373@string[opt="i"] glyphs A string of glyphs to use for the single KITEM 374 statement. 375]] 376function ice_cave_magic_loot(e, glyphs) 377 if glyphs == nil then 378 glyphs = "i" 379 end 380 381 local quality = "" 382 if dgn.persist.ice_cave_hard then 383 quality = " good_item" 384 end 385 e.kitem(glyphs .. " = book of ice / book of the tundra" .. 386 " / ozocubu's autobiography / randbook disc:ice" .. 387 " / manual of ice magic / staff of cold / ring of ice" .. quality .. 388 " / ring of protection from cold" .. quality .. 389 " / wand of iceblast / phial of floods / condenser vane") 390end 391 392--[[ 393Define some common loot items using six KITEM statments on the supplied glyphs. 394The first three are armour, the next two are weapons, and that last is magical 395items. See comments for ice_cave_armour_loot, ice_cave_weapon_loot, and 396ice_cave_magic_loot for details. 397 398@tab e The map environment. 399@string[opt="defghi"] glyphs A string of six glyphs to use for the six KITEM 400 statements. 401]] 402function ice_cave_common_loot(e, glyphs) 403 if glyphs == nil then 404 glyphs = "defghi" 405 end 406 407 ice_cave_armour_loot(e, glyphs:sub(1,3)) 408 ice_cave_weapon_loot(e, glyphs:sub(4,5)) 409 ice_cave_magic_loot(e, glyphs:sub(6,6)) 410end 411 412--[[ 413Define one kitem glyph containing necromancy themed items, including 414spellbooks, a manual, staff of death, and an artefact ring of positive energy. 415 416@tab e The map environment. 417@string[opt="j"] glyphs Glyphs to use for the single KITEM statement. 418]] 419function ice_cave_necro_loot(e, glyphs) 420 if glyphs == nil then 421 glyphs = "j" 422 end 423 424 e.kitem(glyphs .. " = book of unlife / randbook disc:ice" .. 425 " disc2:necromancy numspells:6" .. 426 "/ manual of necromancy w:5 / staff of death" .. 427 "/ ring of positive energy randart") 428end 429 430}} 431 432############################################################################### 433# 434# <<1>> Entry vaults. 435# 436# All must call the function ice_cave_portal() to set the create the portal 437# timer and set the common CHANCE value. Any entry placing out-of-depth 438# monsters should have a lower weight. 439# 440############################################################################### 441 442 443############################################################################### 444# Entry vaults that place for both ice cave difficulties. 445 446default-depth: D:11-, Lair, Orc, Elf, Swamp, Shoals, Snake, Spider 447 448NAME: portal_ice_cave_entry_pillars_1 449TAGS: transparent 450: ice_cave_portal(_G) 451MAP 452 ... 453 .a. 454....... 455.a.O.a. 456....... 457 .a. 458 ... 459ENDMAP 460 461NAME: portal_ice_cave_entry_pillars_2 462TAGS: transparent 463: ice_cave_portal(_G) 464MAP 465 ... 466 ..a.. 467..a.a.. 468.a.O.a. 469..a.a.. 470 ..a.. 471 ... 472ENDMAP 473 474NAME: portal_ice_cave_entry_ice_simulacra 475TAGS: patrolling no_monster_gen transparent 476{{ 477ice_cave_portal(_G) 478local simul = simulacrum_monsters() 479mons(simul["mocking"]) 480mons(simul["savage"]) 481}} 482: if you.in_branch("D") then 483: if you.depth() < 12 then 484SUBST: 1 = 1. 485: else 486SUBST: 1 = 112 487: end 488# Savage only for Lair, but fewer. 489: elseif you.in_branch("Lair") then 490: if you.depth() < 4 then 491SUBST: 1 = 2... 492: else 493SUBST: 1 = 2. 494: end 495# Orc 496: elseif you.in_branch("Orc") then 497SUBST: 1 = 112 498: else 499SUBST: 1 = 12 500: end 501MAP 502..1.. 503.1.1. 5041.O.1 505.1.1. 506..1.. 507ENDMAP 508 509############################################################################### 510# Entry vaults that only place easy ice cave entrances 511 512default-depth: D:11-13, Lair, Orc 513 514NAME: portal_ice_cave_entry_imps 515TAGS: patrolling no_monster_gen transparent 516: ice_cave_portal(_G) 517MONS: white imp 518MAP 519..1.. 520.111. 52111O11 522.111. 523..1.. 524ENDMAP 525 526NAME: portal_ice_cave_entry_animals_and_master 527TAGS: patrolling no_monster_gen 528DEPTH: D:11-13, Lair:4-, Orc 529WEIGHT: 5 530: ice_cave_portal(_G) 531MONS: wolf, yak, polar bear, rime drake, ice dragon 532SUBST: D = 12 .:1, E = 2 3:5 .:1, F = 3 4:2, H = 4:2 5:8 533MAP 534xx xxxxxxx 535axxxxxxaaaaaxx 536aaxaaaaa...aax 537@aaaaDa.E.F.ax 538a.a..D...O.Hax 539aa.aaaD.E.F.ax 540xaaaaa.a...aax 541xxxxxaaaaaaaxx 542 xxxxxxxxx 543ENDMAP 544 545NAME: portal_ice_cave_demonic_guard 546TAGS: patrolling no_monster_gen 547: ice_cave_portal(_G) 548MONS: ice devil 549MAP 550xxxxxxxxx 551xaaaaaaax 552xa..O..ax 553xa.....ax 554xa.1.1.ax 555xa.....ax 556xaaa.aaax 557xxaa.aaxx 558xxa...axx 559xxa+a+axx 560ENDMAP 561 562NAME: portal_ice_cave_rime 563TAGS: patrolling no_monster_gen no_pool_fixup transparent 564: ice_cave_portal(_G) 565MONS: rime drake 566MAP 567 ''''' 568 wwwww'' 569'waaaaa'' 570'waO1...' 571'wa1....w 572'wa...wa' 573''a..waw 574 ''..aw 575 ''w' 576ENDMAP 577 578############################################################################### 579# Entry vaults that only place hard ice cave entrances 580 581default-depth: D:14-, Elf, Swamp, Shoals, Snake, Spider 582 583NAME: portal_ice_cave_entry_pillars_three 584TAGS: transparent 585: ice_cave_portal(_G) 586MAP 587 ... 588....a... 589.a...aa. 590..aaOaa.. 591 .aa...a. 592 ...a.... 593 ... 594ENDMAP 595 596NAME: portal_ice_cave_entry_pillars_four 597TAGS: transparent 598: ice_cave_portal(_G) 599MAP 600 ... 601 .a.a. 602 .a.a.a. 603.a.a.a.a. 604..a.O.a.. 605.a.a.a.a. 606 .a.a.a. 607 .a.a. 608 ... 609ENDMAP 610 611NAME: portal_ice_cave_entry_horrid_things 612TAGS: patrolling no_monster_gen transparent 613DEPTH: D:14-, Elf, Snake, Swamp 614WEIGHT: 5 615: ice_cave_portal(_G) 616MONS: white ugly thing, freezing wraith, azure jelly / white very ugly thing 617SUBST: 1 = 1., 2 = 2 .:3, 3 = 3:3 2:7 618MAP 619xxxxxxxxxxxxxxxxxxxxxxx 620xxaaaaaxaaaaaaaaaaxxxxx 621xaa...aaa........aaxxxx 622xa.....a....2..1..aaaaa 623xa..O..+..3...1.1.....+ 624xa.....a....2..1..aaaaa 625xaa...aaa........aaxxxx 626xxaaaaaxaaaaaaaaaaxxxxx 627xxxxxxxxxxxxxxxxxxxxxxx 628ENDMAP 629 630NAME: portal_ice_cave_entry_ice_statue_one 631TAGS: no_monster_gen no_pool_fixup transparent 632: ice_cave_portal(_G) 633MONS: ice statue 634KFEAT: ^ = web trap 635: if you.in_branch("Swamp") then 636SUBST: + = ., x = t 637: elseif you.in_branch("Shoals") then 638SUBST: x = w 639: elseif you.in_branch("Spider") then 640SUBST: + = ^ 641: end 642MAP 643 xxxxxxx 644xxaaaaaxx 645xaa...aax 646xa..O..ax 647xa.....ax 648xa..1..ax 649xa.....ax 650xaa...aax 651xxaa+aaxx 652ENDMAP 653 654NAME: portal_ice_cave_entry_ice_statue_two 655TAGS: transparent patrolling no_monster_gen 656: ice_cave_portal(_G) 657MONS: ice statue, ice dragon 658SUBST: 2 = 1:9 2:1 659MAP 660 ..... 661 ......... 662........... 663.....1..... 664.....O..... 665.....2..... 666........... 667 ......... 668 ..... 669ENDMAP 670 671NAME: portal_ice_cave_entry_dragon 672TAGS: no_monster_gen no_pool_fixup patrolling 673MONS: ice dragon 674: ice_cave_portal(_G) 675: if you.in_branch("Swamp") then 676SUBST: x = t 677: elseif you.in_branch("Shoals") then 678SUBST: x = w 679: end 680MAP 681xxxxxxxx 682xaaaaaxx 683xaO..aax 684xa.1a.ax 685xa.a..a@ 686xaa..a.' 687xxaaa..' 688xxxx@''' 689ENDMAP 690 691NAME: portal_ice_cave_entry_frozen_things 692TAGS: no_monster_gen transparent 693MONS: freezing wraith, azure jelly 694SUBST: 2 = 12. 695: ice_cave_portal(_G) 696MAP 697 ''''' 698 ''aaa'' 699''aaOaa'' 700'aa.2.aa' 701'a.....a' 702'a.1.1.a' 703'aaa.aaa' 704'aaa.aaa' 705'aaa+aaa' 706''''''''' 707ENDMAP 708 709NAME: portal_ice_cave_entry_ugly_swarm 710TAGS: no_monster_gen transparent patrolling 711MONS: white ugly thing, white very ugly thing 712SHUFFLE: ABC 713SUBST: a = aa. 714NSUBST: 1 = 12 / 4=1 / ., . = 8=1. / . 715: ice_cave_portal(_G) 716MAP 717 ''''''' 718 ''''''''' 719 '''.....''' 720 '''.a.a.a.''' 721'''.........''' 722''.a..111..a.'' 723''...11111...'' 724''.a.11O11.a.'' 725''...11111...'' 726''.a..111..a.'' 727'''.........''' 728 '''.a.a.a.''' 729 '''.....''' 730 ''''''''' 731 ''''''' 732ENDMAP 733 734############################################################################### 735# 736# <<2>> Ice Cave maps. 737# 738# Ice caves feature monsters that have some form of ice-themed attack, or at 739# least convey a sense that they could survive in a cold place. Terrain-wise, 740# ice caves have white-colored walls and sometimes use freezing vapour machines 741# and deep water. All maps should have an escape very close to the start, so 742# the player can back away if the challenge is deemed too much to handle. Many 743# maps place equipment at early or midway points that grants cold resistance, 744# so that players lacking that might have a better chance to complete the map. 745# Many maps have randomized shortcuts through deep water or freezing vapour 746# machines that let the player bypass difficult portions of the map, or use the 747# water or clouds to their advantage. 748# 749# Ideally all maps will implement an easy and a hard variant, checking the 750# variable dgn.persist.ice_cave_hard, which is true for hard ice caves. Easy 751# ice caves should be challenging but completable for most characters in the 752# mid Dungeon, Lair, and Orc. Hard ice caves should be challenging for 753# characters in late Dungeon, Lair Branches, and Elf. If a map concept can 754# somehow only work at one of the two difficulties, it should veto for the 755# other difficulty. For example, an easy-only map would veto for hard ice caves 756# with: 757# 758# veto {{ return dgn.persist.ice_cave_hard }} 759# 760# All maps should also call the function ice_cave_appearance() at the end of 761# their statements define the exit feature and terrain appearance. 762# 763############################################################################### 764 765default-depth: IceCv 766 767############################################################################### 768# The small caves. 769# 770# A set of maps with "small" cave systems that feature a specific theme and a 771# main path without many chokepoints. They feature an early or midway point one 772# can reach for some loot if more difficult challenge at the end can't be 773# finished. 774 775# Foes: Natural monster set with one frost giant for easy difficulty and two or 776# more for hard difficulty. 777# 778# Loot: Common ice cave loot set, with an emphasis on weapons, plus some 779# potions. 780NAME: ice_cave_small_giant 781TAGS: no_item_gen no_monster_gen no_pool_fixup 782ORIENT: encompass 783: ice_cave_common_loot(_G) 784: kitem("j = " .. dgn.loot_potions) 785: ice_cave_natural_monster_set(_G) 786# For easy ice cave, always one frost giant and the potion area has fewer 787# monsters with only 33% chance for the 6 glyph miniboss. For hard ice cave, 788# minimum of two frost giants, with 25% each for up to two more, and the potion 789# area has more monsters and always has a miniboss. 790: if dgn.persist.ice_cave_hard then 791NSUBST: E8 = 2=7 / 7..., F = 6 / 5 / 2=5. / 4=12.. / . 792: else 793NSUBST: F = 556 / 2=5. / 2=12.. / . 794: end 795NSUBST: D = 45 796# Randomize tunnel layout and the loot composition and locations. 797SHUFFLE: "w / 'a 798SUBST: 'a = x, j = j. 799NSUBST: d = 3=def... / 5=gh.. / 2=i. / . 800: ice_cave_appearance(_G) 801MAP 802 xxxxx xxxxxxxx 803 xxx...xxxx xxxx1D....xx 804 xxxxxxxx...x....xxxx...D.x....xxxx 805 xxxx......1..xxxx...xD1D.xxxxxxx...1xxxx 806 xx.......1..4.xxxxxx....xxxxxxxxxxxxD1..xxx 807 xxx...xxxxE8E2....xxxxxxxxxxxxxxxxxxxxxx....xxx 808 xx...xxxddxxE5..1...xxxxxxxxxxxxxxxxxxxxxxx....xxx 809 x...xxdddddxx..1.....xxxxxxxxxxxxxxxxxxxxxxxx....x 810 x...x$$$$dddx.......xxxxxxxxxxxxxxxxxxxxxxxxxxx..x 811 x...x....$$xx.....xxxxxxxxxxxxxxxxxxxxxxxxxxxx11xx 812 xx.......xxx.....xxxxxxxxxxxxxxxxxxxxxxxxxx...Dxx 813 xx............xxxxxxxxxxxxxxxxxxxxxxxxx......xx 814 xxx"xx.........x'aaaxxxxxxxxxxxxxxxxxxx...x.xxxx 815 xwwwxxxxxxxxxxxxxaaaxxxxxxxxxxxxxxxxxx..xxxxx 816 xxwwwxxxxxxxxxaaaaaxxxxxxxxxxxxxxxxxx..xx 817 xwwwwxxxxxxxxxxxaaa'xxxxxxxxxxxxxxx3...xxx 818 xwwwxxxxxxxxxxxxxx'x'xxxxxxxxxxxxx.......xxx 819xxwwxxxxxxxxxxxxxxxx'xxxxxxx"xxxxxxxx.......xxx 820x""xxxxxxxxxxxxxxxx''xxxxx"""xxxxxxxxx....D...xx 821xx""xxxxxxxxxxxxxx''xxxxxx"""""..xxxxxxxD......x 822 xx""xxxxxxxxxxxx'x'xxxx"""xxx.......xxx.......x 823 x"x"xxxxxxxxxxx''xxxxx"xx'''xx......24x.....xx 824 xx"""xxxxxxxxxxx''xxx""x''x'''x....1..2....xx 825 xxx""""xxxxxxxxx''xx"xx''xxxxxx.1......1.xx 826 xxx"x"xxxxxxxxx'xx""xx''xx xx.x....x.xx 827 xxx"xxxxxxxxx''x""xxxx''xx xxxx..xxxx 828 xx"""xxxxxxxx'x'x"x"xxxx''xx xx..x 829 xx""xxxxxxxxxx''xxx"x"xxxx''x xx..xx 830 xx""x"xxxxxxxxxx''xxx""xxx''xx x..xx 831 xx""x"xxxxxxxxxxxx'xxxx""x''xx x...xx 832 x""xxxxxxxxxxxxxx'x'xxxx""'xx xx...xx 833 x"x"xxxxxxxxxxxxxx'''xxxx..x xx12.x 834 xx""xxxxxxxxxxxxxxxx'xF.xF.xx xx1.1x 835xx""xxxxxxxxxxxxxxxxxxFjx.xxx x...xx 836x""xxxxxxxxxxxxxxxxF.xjxjxFxx xx...xx 837x"x"xxxxxxxxxxxxxxx.xjxjxjFxx xx.....xx 838xx"x"xxxx""x"xxxxxx".F.F.Fxx x...A...x 839 xx""""x""""x""x""""xxxxxxx x.......x 840 xxxx"""xxx"x""""xxx xx..<..xx 841 xxxxx xxxxxxxx xx...xx 842 xxxxx 843ENDMAP 844 845# Foes: Icy dragon-themed monsters. End boss is either a dragon, with ice 846# dragon for easy, golden for hard, or white draconian, with ordinary draconian 847# for easy, draconian knight for hard. 848# 849# Loot: A lot of gold, some jewellery, and possible items from the common loot 850# set. 851NAME: ice_cave_small_dragons 852TAGS: no_item_gen no_monster_gen no_pool_fixup 853ORIENT: encompass 854: ice_cave_common_loot(_G) 855KITEM: j = any jewellery 856# For easy ice caves, there are two ice statues, the boss is white draconian 857# instead of ice dragon half the time, and the higher quality jewellery is 858# good_item. For hard ice cave, there is one orange crystal statue and another 859# tier 2 monster, whenand the high quality jewellery is always randart. 860: if dgn.persist.ice_cave_hard then 861KITEM: k = any jewellery randart 862MONS: lindwurm simulacrum / ice dragon simulacrum \ 863 / storm dragon simulacrum / golden dragon simulacrum 864MONS: ice dragon, orange crystal statue, golden dragon 865{{ 866kmons("D = white draconian ; " .. 867 dgn.random_item_def({["scimitar"] = 2, ["halberd"] = 2, ["broad axe"] = 1, 868 ["morningstar"] = 2}, "freezing", nil, "|") .. " . cloak") 869kmons("E = white draconian knight ; " .. 870 dgn.monster_weapon("knight", "freezing", "good_item", "|") .. 871 " . cloak good_item") 872set_random_mon_list("lindwurm simulacrum / swamp dragon simulacrum \ 873 / ice dragon simulacrum / golden dragon simulacrum \ 874 / white draconian / ice dragon") 875}} 876# 50% chance for dragons vs draconians. 877NSUBST: 3 = 3 / 2 878SHUFFLE: 24 / DE 879: else 880KITEM: k = any jewellery good_item 881MONS: steam dragon simulacrum / acid dragon simulacrum \ 882 / komodo dragon simulacrum / lindwurm simulacrum w:5 883MONS: rime drake, ice statue, ice dragon, white draconian 884{{ 885set_random_mon_list("steam dragon simulacrum / acid dragon simulacrum \ 886 / komodo dragon simulacrum / lindwurm simulacrum \ 887 / rime drake w:20") 888}} 889# 50% chance for a white draconian boss instead of an ice dragon. 890SUBST: 4 = 45 891: end 892# Two guaranteed jewellery with 4 pieces on average. 893NSUBST: j = j / *=j$$$, k = k / *=k$$$ 894# Make each of d through i have about a 50% chance of placing, and reduce the 895# gold placed to about 22 piles on-average. 896SUBST: $ = $:440 d e f g h i .:140 897# Randomize the winding tunnels. 898SHUFFLE: 'w / "a 899SUBST: "a = x 900: ice_cave_appearance(_G) 901MAP 902 xxxxxxxx 903 xxxx......xxxx 904 xx......x....1xxx 905 x...xx.xxx..12..xxx 906 xxxxx..xxx$$..24..jkxx 907 xx...xx.xx$$$$1...jkjjx 908 xx.x....x$$$$$$$.jkjjxx 909 xx..xxx.xxxx$$$$$$xxx''x 910 xxxx11xxxxxxxxxxxxxxxxxwx'x 911 xxxx.111xxxxxxxxxxxxxxxxwwwwwxx 912 xxx.....1xxxxxxxxxxxxxxxxwwwwwwxxx 913 xx...xxxxxxxxxxxxxxxxxxxxxxwwwwxxxx 914 xx..xxxxxxxxxxxxxxxxxxxxxxxxx'xxxxxx 915 xxx..xxxxxxxxxxxxxxxxxxxxxxxxx..xxxxx 916 xxx....xxxxxxxxxxx"xxxxxx""""x....xxxxx 917 xx........xxxxxxxx"""x"x"""x"x.'xx.xxxx 918 xx...........xxxx"""x""x""xxxx"x''xx""xx 919xx..............x""xxxxx"xxxxxxxxx''xx""xx 920x.......2........xxxxxxxxxxxxxxxxxx''x"x"x 921x.................xxxxxxxxxxxxxxxxxx'xx"xx 922xx....1.1.1.....x'''xxxxxxxxxxxxxx'''x""x 923 xx.............xxx''xx''xxxx'''x'x'xx"xx 924 xx..........xxxxxx'''''''x''x''''xx""x 925 xx3x....x3xxxxxxxx'xxxx'''1xxxxx"""xx 926 xxxx..xxxxxxxxxxxxxxxxx$$$xxx""""xx 927 xx..xxxxxxxxxxxxx"""1$2*$xx"x"xx 928 xx..xxxxxxxxxxxxx""x"1$$|$1xx"xx 929 x..xxxx"xxxxxxxxx""xxx1x1x""""x 930 x...x"""""xxxxxxxx"""xxxxxx"xxx 931 xx..."x"x"""xxxxx"x""x xxx 932 xx.1.xxxxx"""x"xx""xx 933 xx1.1x xxx""""""xx 934 x...xx xxxx"xxx 935 xx...xx xxx 936 xx.....xx 937 x...A...x 938 x.......x 939 xx..<..xx 940 xx...xx 941 xxxxx 942ENDMAP 943 944# Foes: Undead + demons set. For easy ice caves, a necromancer boss, and for 945# hard ice caves, the necromancer is a sub boss with a lich end boss. 946# 947# Loot: Common loot set along with a necromancy loot item. 948NAME: ice_cave_small_necro 949TAGS: no_item_gen no_monster_gen no_pool_fixup 950ORIENT: encompass 951KPROP: yY'j = bloody 952: ice_cave_common_loot(_G) 953: ice_cave_necro_loot(_G) 954: ice_cave_undead_demon_monster_set(_G) 955KMONS: D = necromancer 956KFEAT: _ = altar_kikubaaqudgha 957KFEAT: ^ = alarm trap 958KFEAT: y = x 959KFEAT: " = + 960# For the easy ice cave, necromancer + elephants as boss, second area gets a 961# mix of appropriate monsters. For the hard ice cave, lich and friends as boss 962# and necromancer + dire elephants + friends in second area. 963: if dgn.persist.ice_cave_hard then 964KMONS: E = lich 965SUBST: D = E, K = D 966:else 967SUBST: K = 5 968:end 969SHUFFLE: fghi, def 970SUBST: f = f*, N = 456, - = ........^ 971# Set up two shortcuts, each with a 50% to be open. Each open shortcut has a 972# 50% chance to be open space with a freezing cloud machine and a 50% chance to 973# be deep water. 974SHUFFLE: apq / aa! / zzz / zzz 975SUBST: a = ., pq = w, z = x 976: place_freezing_vapour_machine(_G, 8) 977# Replace this glyph with floor so we can re-use it. 978SUBST: ! = . 979SHUFFLE: rsu / rr! / zzz / zzz 980SUBST: r = ., su = w, z = x 981: place_freezing_vapour_machine(_G, 12) 982: ice_cave_appearance(_G) 983MAP 984 xxxxxx 985 xxx....xx 986 xxx.......x 987 xxxxxx xx...xxx..xx 988 xxpqppxxx...xxx..xx 989 xxppppxxx...xxx..xx 990 xxxxxxxxxpqpxaaxN..xxx...x 991 xx.G...G.aappxx...Nxxxx..xx xxxxx 992xxxx.........xxxx....xxxxx...xxx xxx...xxxx 993xfx....2_424.xxxx..xxxxxxxx....xxx...2....xx 994x*+.....K...2xxxx...xxxxxxxx.......2.1.2...xx 995xgx....52N.N42xxxx.N.xxxxxxxxxx...1.....1...x 996xxxx..4...N24xxxxxxxN..xxxxxxxxx............x 997 xxxG5.4G...xxxxxxxx...xxxxxxxx2........2xx 998 xxxxxx....xxxxxxxx....xxxxxxx1x....x1xx 999 xxx...xx.xxxxxx....xxxxxxxx..xxxx 1000 xyyyyyxx....xx...xxxxxxx...xxxxxxx..x 1001 xyYj'yxx..xxx..x..xxxxxxxx..xxxxx..xx 1002 xyyy"yxxx.....xxx.....xxx..xxsxx..xx 1003 xxN.'''Nxxx...xxxxx........xxxssr...xx 1004 xx...4D4.2xxxxxxxxxG.N..N...xxssurx...xx 1005xx.2x$**$x.2xxxxxxd%...1.....xxsssxxx.22x 1006x..2xxhixx2..xxxxxe%....N....rsusssxx2.2x 1007x....xxxx...xxxxxxxxx.......xrxsssxx...xx 1008xxx.........xxxxxxxxxxx...xxxxsssxxx...xx 1009 x...3....xxxxxxxxxxxxx..xxxxxxxxx.....xx 1010 xx------xxxxx.xxxxxxxxxx..xx x...A...x 1011 xx----xxxxx....xxxxx..x...xx x.......x 1012 x---xx.x...xx....x.....xxx xx..<..xx 1013 xx.......xxxxxx....xxxxx xx...xx 1014 xxx.xx.xx xxxxxx xxxxx 1015 xxxxxx 1016ENDMAP 1017 1018# Foes: Undead + demon set with a demonic boss. 1019# Loot: Common loot set. 1020NAME: ice_cave_small_demon 1021TAGS: no_item_gen no_monster_gen no_pool_fixup 1022ORIENT: encompass 1023: ice_cave_common_loot(_G) 1024: ice_cave_undead_demon_monster_set(_G, "E") 1025# For hard ice caves, place an obsidian statue and a 50% chance for an OCS. 1026# fiend. For the boss, 50% chance for either reapers or ice fiend. If reapers, 1027# two guaranteed and 33% each for up to two more. If ice fiend, 50% chance for 1028# a second. For easy ice caves, always place a single reaper. 1029: if dgn.persist.ice_cave_hard then 1030KMONS: D = orange crystal statue 1031SHUFFLE: EF / 8H 1032NSUBST: 3 = 3 / D4, F = E / E.., H = 8. / . 1033: else 1034SUBST: 6 = 56 1035: end 1036SHUFFLE: dg, fh 1037SUBST: i = e|ii 1038# Place middle-tier monsters and cloud generators in the boss chamber. 1039SHUFFLE: JK / LM / NO / PQ / RS 1040SUBST: JL = 44., KM = !, MNOPQR = ., Z = 25 1041: place_freezing_vapour_machine(_G) 1042# Add in 1s and 2s throughout the map, doing this last so we have more space. 1043NSUBST: . = 6=1 / 6=1. / 2 / 2=2. / . 1044# Set up two shortcuts, each with a 50% to be open. Each open shortcut has a 1045# 50% chance to be open space with a freezing vapour machine and a 50% chance 1046# to be deep water. 1047SHUFFLE: apq / aa! / zzz / zzz 1048SUBST: a = ., pq = w, z = x 1049: place_freezing_vapour_machine(_G, 12) 1050# Replace this glyph with floor so we can re-use it. 1051SUBST: ! = . 1052SHUFFLE: rsu / rr! / zzz / zzz 1053SUBST: r = ., su = w, z = x 1054: place_freezing_vapour_machine(_G, 8) 1055: ice_cave_appearance(_G) 1056MAP 1057 xxxxxx 1058 xxx....xxx 1059 xx........xxx 1060 xx....xxx....xx 1061 xxxxx x...xxx6xxx...xxx 1062 xx...xxxxx x...xx4...xxxx..xx 1063xx.4..2...xx xxxxxx..xx....2xx...x 1064x1......1..xxx.x...........gxxx..x 1065xx..........x.........xx..dxx...xx 1066x.1.....1.......xxrxxxxxxxxx...xx 1067xx............xxxsssxxxxxxx...xx 1068 x..........xxxxssuxxxxxxK..xxx 1069 x3x....x3xxxxxxxxrr....J..xx 1070 xxxx..xxxxxxxxxx......JKJ..xxx 1071 xx..axxpxxxx....xx.........xxx 1072 xx..xapqpax.....xx..xxxx..Q...xx 1073 x..xxpppxaZ.M.x.....N..x...P...xx 1074 x...xxxxxx..L.xxx..O.N.xx.PQP..Zxx 1075 xx...xxxxxZLML..xx..N...xx.......x 1076 xx.-.xxxxx.........x.O........Zxx 1077 xx---xxxxxx...xxx..x..xxx.....xx 1078 x---xxxxxxxxxxx....x.....x..xxx 1079 xx---xxxxxxxxx...S..x.....xxxx 1080 xx-----xxxxxxxxx.xx.R...Sxxx 1081 x---A---xxxxxccccc.R.R.ccccc 1082 x-------xxxxxc...cccFccc...c 1083 xx--<--xxxxxxc.f...FEF...h.c 1084 xx---xxxxxxxc...cc*i*cc...c 1085 xxxxxxxxxxxccccccccccccccc 1086 xxxxx 1087ENDMAP 1088 1089# This is an ice cave which is also a tomb of a necromancer who likes staying 1090# alive and simulacrums, or just a chillout of an ice fiend. By Zaba. 1091# 1092# Foes: Undead + demon set with necromancer + bog body or demon boss for easy 1093# ice caves, or either reapers or fiend for hard ice caves. 1094# 1095# Loot: Common loot set with a necromancy themed item. 1096NAME: ice_cave_tombish 1097TAGS: no_item_gen no_monster_gen 1098ORIENT: encompass 1099: ice_cave_common_loot(_G) 1100: ice_cave_necro_loot(_G) 1101# Scroll loot under statues. 1102KITEM: 3 = any scroll 1103: kitem("D8 = " .. dgn.loot_scrolls) 1104KITEM: D = any scroll 1105# For easy ice caves, small chance for freezing wraiths in tomb area. For the 1106# boss, a 50% chance for either necromancer plus bog body or reaper. For hard 1107# ice caves, bog bodies in tomb area. The boss is 50% chance reapers versus one 1108# or two ice fiends. For reapers, minimum of two, 33% chance each for up to two 1109# more. For ice fiend, minimum of one and 50% chance for another. 1110: if dgn.persist.ice_cave_hard then 1111: ice_cave_undead_demon_monster_set(_G) 1112KMONS: D7 = reaper ; scythe ego:freezing 1113SHUFFLE: D7 / 88 1114NSUBST: 7 = 7 / 7.., 8 = 8 / 8. / . 1115NSUBST: 4 = 6 / 446, F = 122445 1116: else 1117: ice_cave_undead_demon_monster_set(_G) 1118KMONS: D = necromancer 1119SHUFFLE: D7 / 88 1120NSUBST: 7 = 7 / ., 8 = 8 / . 1121SUBST: 4 = 4:70 6, F = .12244 1122: end 1123# Shuffle main loot chamber items, and then the locations of the non-necro loot 1124# items to possibly be at other locations and to possibly include magical loot. 1125SHUFFLE: fghi, defgh 1126SUBST: d = d*, e = e*, f = f*, g = g*, h = h* 1127: ice_cave_appearance(_G) 1128MAP 1129 xxxxx 1130 xx...xx 1131 xx.....xx 1132 x...A...x 1133 x...<...x 1134 xx.....xx 1135 xx...xx 1136 x...xx 1137 xx..1x 1138 xx..1x 1139 x...xx 1140 xxxx...xxxx 1141 xx3x.....x3xx 1142 xx...........xx 1143 x.............x 1144xx.............xx 1145x.......F.......x 1146x....F.....F....x 1147x.......U.......x 1148x....F.....F....x 1149x.......F.......x 1150xx.............xx 1151 x.cnnc...cnnc.x 1152 xxc44c...c44cxx 1153 xcVdcc+cceVcx 1154 ccc+c...c+ccc 1155 c...c...c...c 1156ccc.ccc...ccc.ccc 1157c...c5c...c5c...c 1158c+ccc+c...c+ccc+c 1159c.c5+.......+5c.c 1160c.ccc.G...G.ccc.c 1161c.c5+.......+5c.c 1162c.ccc.G...G.ccc.c 1163c.+...........+.c 1164c.ccc.G...G.ccc.c 1165c.c5+.......+5c.c 1166c.ccc.G...G.ccc.c 1167c.c5+.......+5c.c 1168c+cccccc+cccccc+c 1169c...............c 1170ccccG.ccccc.Gcccc 1171 cc.cfDgc.cc 1172 c.c7U7c.c 1173 c.ch7ic.c 1174 c.cc+cc.c 1175 c.......c 1176 ccccVcccc 1177 ccc 1178ENDMAP 1179 1180############################################################################ 1181# The sprawling caverns. 1182# 1183# A winding, tight cavern with a hard challenge at the end. You can always go 1184# back to the beginning to retreat. The caverns are more rare than the caves. 1185# 1186# Details below are common to all caverns maps we have thus far. 1187# Foes: 50% chance each of either the undead+demons set or the natural set. 1188# Loot: Common loot set plus random wands/misc, potions, and scrolls. 1189 1190NAME: ice_cave_caverns_01 1191TAGS: no_item_gen no_monster_gen no_pool_fixup 1192ORIENT: encompass 1193: ice_cave_common_loot(_G) 1194: kitem("j = any wand / any potion w:5 / any scroll w:5") 1195: kitem("k = any misc / " .. dgn.loot_potions .. " / " .. dgn.loot_scrolls) 1196# Pick one of two themes, undead/demons or natural monsters. 1197: if crawl.coinflip() then 1198: ice_cave_undead_demon_monster_set(_G) 1199: else 1200: ice_cave_natural_monster_set(_G) 1201: end 1202# Randomize bosses tiers and shuffle statue monster and miniboss locations. 1203SHUFFLE: 7F / F8, 3H / UJ 1204# For easy ice caves, 33% chance for the "miniboss" fight to be a solo 6, 1205# otherwise two or three tier 5s. For the boss, either a fight with two tier 7 1206# or one tier 8, along with other friends. For hard ice cave, the miniboss is 1207# always includes a 6 tier along with one to two tier 5s. For the boss, still 1208# two tier 7s or one tier 8. 1209: if dgn.persist.ice_cave_hard then 1210NSUBST: J = 6 / 5. 1211: else 1212SUBST: J : JJK 1213NSUBST: J = 2=5 / 5., K = 6 / . 1214: end 1215# Randomize loot so that two armour pieces will be at various places in the 1216# map, and randomize loot locations at the end stash. 1217SHUFFLE: efghi, def 1218SUBST: D = 12, E = 2 4:2 5:5, 2 = 2 .:5 1219# Choose one of two possible paths to open up. 1220SHUFFLE: '- 1221SUBST: ' = x 1222# Set up three shortcuts, each with a 50% to be open. Each open shortcut has a 1223# 50% chance to be open space with a freezing vapour machine and a 50% chance 1224# to be deep water. 1225SHUFFLE: apq / aa! / ZZZ / ZZZ 1226SUBST: a = ., pq = w, Z = x 1227: place_freezing_vapour_machine(_G, 12) 1228# Replace this glyph with floor so we can re-use it. 1229SUBST: ! = . 1230SHUFFLE: rsu / rr! / ZZZ / ZZZ 1231SUBST: r = ., su = w, Z = x 1232: place_freezing_vapour_machine(_G, 12) 1233SUBST: ! = . 1234SHUFFLE: yz" / yy! / ZZZ / ZZZ 1235SUBST: y = ., z" = w, Z = x 1236: place_freezing_vapour_machine(_G, 12) 1237: ice_cave_appearance(_G) 1238MAP 1239 xxx xxxx xxxx xxxx 1240 xxx.xx xx-'xx xxxppxxxppxxxxx xxxx xxxxxxxxxx xxx 1241xx....x xxxx....xxxxppppppppppxx*xxx$$xxxxxxxx...xx...xxxxxxxxkxx 1242x...A.xxxxxx....xx....xxpppppppaaa*x*xxx$$x-.x...xx...xx...xxxxxjxjx 1243x.<....'-....xxxxxxx...aaqppqppqpxx*x.xxxx.'x..xxxxxxxxxx....Hxxx.xx 1244xx..xx....xxxxxxxx1111xxppppppppppxxxx...xxxxx..xxxxxxxxxx..3.Hx.xx 1245xxxxxxxxxxxxxxx....xxxxxxxxppppppxx11..x...x..xxxxxxxxxxxxx....Hxx 1246 xxx.....xxxx------xxppxxxxD1xxxxxx..xxxxxxxxxxxxxx...xxyxxx 1247 xxxx..xxxxxx---xx-----xxxx...xxxxxxxxxxxxxxxxxxxxxxx...xxxzzzx 1248 xxx....xxxxx--xxxxxxxx---xx..xxxxxxxxxxxxxxxxxxxxxx....xxxxzzzxxx 1249 xx...xxxxxxx-xxxx....xxx--xxx..xxxxxxxxxxxxxxx....x...xxxxxzzxz"zxx 1250xxx..xxxxxxxx-xxx...xx...xxx-xxx..xxxxxxxxxxx...xx....xxxxxxxxxxxxzzx 1251x...xxxxxxxxxx-...x.xxxx...xx-x..xxxxxxxxxxx..xxxxxxxxxxxxxxxx.xxxyzx 1252x..xxxxxxxxxxx1E1xxxjxxxx...x-xx.11xxxxxxxxxx...xxxxxxxxxe.*x.x.xxyxx 1253xx..xxxxxxxxx...xxxdxxx...xxx-xxxxD1xxxxxxxxxx..1.xxxxxx.JUJ.xxx..x 1254xx..xxxxxxxxx....xxxx..xxxwxx-xx...xxxxxxxxxxxx.1..xxxxxx..Jxx..xxx 1255 x..xxxxxxxxx'x.xxxxxD...xxwwx-xxxx1.xxxxxxxxxxxxDE.D.xxxxx..xx...xx 1256 x...xxxxxxx..'xxxxxxx1..Dxxwwx--xxxD.xxsxsxxxxxxxD.E1.xxxx..xxxE5Exx 1257 xx..-xxxxx..xxxxxxxxxxxD.1xxwwxx---11rrssssxxxxxxxx.D..x...xxxD7F7Dx 1258 x...-xx-..xxxxxxxxxxxx-x1.xxwwxx'''xxxsssusssxxxxxxx-...xxxxxxD5Dxxx 1259 x...x--xx..1xxxxxxxx--x-..'xxwx'x'xxxxxxssssssssxx..xxxxx.xxx..xxx|x 1260 x222x''x''x..xx1xxx----xxxx'xx'''xx xxssussusrrx.xxxx.<.xxx.$*fgx 1261 xx'.'xx'xx1.x.1...2xxxxx xx'''xxx xxxssssssxxx''........x|hikx 1262 xxxxxxxxxxxxxxxxxxx xx'xx xssxsxxx xxxxxx.xxxxxxxxxx 1263 xxx xxxxxx xxx 1264ENDMAP 1265 1266# See ice_cave_caverns_01 for comments on most statements; only statements 1267# different in this map are commented. 1268NAME: ice_cave_caverns_02 1269TAGS: no_item_gen no_monster_gen no_pool_fixup 1270ORIENT: encompass 1271: ice_cave_common_loot(_G) 1272: kitem("j = any wand / any potion w:5 / any scroll w:5") 1273: kitem("k = any misc / " .. dgn.loot_potions .. " / " .. dgn.loot_scrolls) 1274: if crawl.coinflip() then 1275: ice_cave_undead_demon_monster_set(_G) 1276: else 1277: ice_cave_natural_monster_set(_G) 1278: end 1279KFEAT: y = w 1280SHUFFLE: 7F / F8, 3H / UJ 1281: if dgn.persist.ice_cave_hard then 1282NSUBST: J = 6 / 5. 1283: else 1284SUBST: J : JJK 1285NSUBST: J = 2=5 / 5., K = 6 / . 1286: end 1287SHUFFLE: fghik, def 1288SUBST: D = 12, E = 2 4:2 5:5, 2 = 2 .:5 1289SHUFFLE: '- 1290SUBST: '=x 1291# A fixed shortcut through a freezing vapour generators with a 50% chance to 1292# place. 1293SUBST: r = rx 1294: place_freezing_vapour_machine(_G, 6, "r") 1295# Two shortcut set up in a similar fashion to ice_cave_caverns_01. 1296SHUFFLE: apq / aa! / zzz / zzz 1297SUBST: a = ., pq = w, z = x 1298: place_freezing_vapour_machine(_G, 8) 1299SUBST: ! = . 1300SHUFFLE: suy / ss! / zzz / zzz 1301SUBST: s = ., uy = w, z = x 1302: place_freezing_vapour_machine(_G, 12) 1303: ice_cave_appearance(_G) 1304MAP 1305 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxx xxxxxxxx xxxxxxxx 1306 x..xappppxax.x.'x-.xD..Dxxxxxxxxxx....x.Wxxxxxx1DE1D.xx xx......xx 1307 x.<.xppqpax...x.x.x.x1D.Dxxxxxxx'''..x.xxWWxx1DxxD.E1.xxxx..xxxJJJxx 1308 xx..xxppxx..xxx-.'xx.xxD.1xxxx'''xxx.-xxxxWWWxxxxxx....x...xxxe.U.*x 1309 x.A.xxxx..xxxxxxxwwwwxxx1.x'''xxxxx---xxxxWWwwwwwxxx-...xxxxxx...xx 1310 x...xxxxx...xxxxxwwwwwxx..'xxxxxxxxxx--xxwwwwwwwxx--xxxxxxxxx..xxx 1311 x...xxxxxxx..xx1-'xxwwxxx--xxxxx'''x--xxwwwwwwwxx'x-xxxx..xxxx..x 1312 xx.11xxxxx1.x...1.2xxwx---xx.*.*.xx..xxxwwwwwwwww'.x.x..xx.x..xxx 1313 x11.xxxxxxxx1xxxxx1.xxxx--x.j.T.j.xxx..xwwwwwwwwx'x-..xxxxx.xxx 1314 xx..xxxxxxxx2..1x11..xxxx-...*.*..xx...xxwwwwwwx'...xxx xxx 1315 xx.xxxxxxxxxxxx.xxx..xxxx...xxxxxxxxx..xxwwwxxx.-xxx 1316xxxxx..xxxx.x*...xxxx...xxxxxx.-xxxxxxx1xxxxxxxxx..xx 1317xdx$xx..xr....-'..xxxxx..xxx''.-xxxxx.Dxxxxsxxxxxx..xxx 1318xx$x.xx..xx..xxxx..xxxxxx..''xx--xxxx11Dsxuuuuxxxxx...xxx 1319x$x..x....xx..xxx..xxxxxxx--xxxx-xx.1.xxsuuuuuuxxxxx....xxx 1320xx.xx.x..xxx..xx.HHxxxxxxxx1.xxxx...xxxxxuyuuuxxxxxxx.D.5.xx 1321xxxxxx..xxxx...xxH3.xxxxxx'-.1x'''xxxxxxuuuuyuuxxxxxx.DE.D.xx 1322 xx..xxxx...xxxx...xxxx..x..''xxxxxxxxxuuuusxxx$$x.5E.D...xx 1323 x...xx...xxxx.x.xxxxx...x.xxxx xxxxxxuxuxsxi*$$...7F7.xx.xxx 1324 x..xxD..xx xx|x.xx...xx.xx xxxxxxxxxxfk|$$$...xxxxxx..xxxxx 1325 x...2.2xx xx....xxxxxxx xxxxxxxxxxgh|$$$$.x xxx....xxx 1326 xx11Dxxx xxxxxxx xxxxxxxxxx xxx...<x 1327 xxxxx xxxxxx 1328ENDMAP 1329 1330# See ice_cave_caverns_01 for comments on most statements; only statements 1331# different in this map are commented. 1332NAME: ice_cave_caverns_03 1333TAGS: no_item_gen no_monster_gen no_pool_fixup 1334ORIENT: encompass 1335: ice_cave_common_loot(_G) 1336: kitem("j = any wand / any potion w:5 / any scroll w:5") 1337: kitem("k = any misc / " .. dgn.loot_potions .. " / " .. dgn.loot_scrolls) 1338: if crawl.coinflip() then 1339: ice_cave_undead_demon_monster_set(_G) 1340: else 1341: ice_cave_natural_monster_set(_G) 1342: end 1343SHUFFLE: 7F / F8, 3H / UJ 1344: if dgn.persist.ice_cave_hard then 1345NSUBST: J = 6 / 5. 1346: else 1347SUBST: J : JJK 1348NSUBST: J = 2=5 / 5., K = 6 / . 1349: end 1350SHUFFLE: fghik, def 1351SUBST: D = 12, E = 2 4:2 5:5, 2 = 2 .:5 1352SHUFFLE: '- 1353# Two shortcut set up in a similar fashion to ice_cave_caverns_01. 1354SHUFFLE: apq / aa! / zzz / zzz 1355SUBST: a = ., pq = w, z = x 1356: place_freezing_vapour_machine(_G, 8) 1357SUBST: ! = . 1358SHUFFLE: rsu / rr! / zzz / zzz 1359SUBST: r = ., su = w, z = x 1360: place_freezing_vapour_machine(_G, 12) 1361: ice_cave_appearance(_G) 1362MAP 1363 xxxxx 1364 x$e*xx xxxxxxxxxx 1365 x.UJxxxxxxxxx...xx...xxx 1366 xxxx.JJ..x..x...xx...xx.DDxxx 1367 xWxxxxx....x..xxxxxxxxxx.DDExxx 1368 xWxWxWW.xxxxx..xxxxxxxxxx.2D2Dx 1369 xxWWWWxW..xx..xxxxxxxxxxxxE7F7x 1370 xxxxWWxwWWxx...xxxxxxxxxxxxx.2Dxxx 1371 xx.WWxxxxxrrxxxxxxxxxxxxxxxx...xx 1372 xxxxxxxxxxxx..xxxxsssssssssssxxxxxxx....xxxx 1373 xxx....xxxxxxxx..xxxssssusssssrr<...x...xx.xkxx 1374 xxx...xx...xxxxxxx..xxxxsssssussxxxx....xxxxxix|x 1375 xx.EEx.xxxxD1Dxxxx..xxx xxssssssxxxxxxxxxx x$x$xhx 1376 xx.E.xxx$xxxxDDDxxxx...xx xxsxssxxx xx|xgxx 1377 x...xxx$xxx11Dxxxxxxxx..x xxxxxxx xxfxx 1378 xx....xxxx..xxxxxxxxx...xx xxx 1379 xx.x.xxxpx....xxxxxxxxxx..xx 1380 xx...xxxppxx....xxxxxxx'''..xx 1381 xx..xxxxxpqpxxx...xxxx''xxxx.-xx 1382 x.1xxxxxapppppaxx..x'''xxxxx---xx 1383 xx.11xxxaxxxxxxa...''xxxxx'xxx--x 1384 xxx1.xx.xxxxxx-xx--xxxxx''''--xx 1385 x..x......xxxx---xx.*.*.xx..xxx 1386 xxx.xxxxx..xxxx--x.j.T.j.xxx..x 1387 x2..2x....xxxx-...*.*..xx...xx 1388 xxxxxxxx.xxx.1xxxx...xxxxxxxxx..x 1389 xx1x...'xxxx.1.xxxxxx.-xxxxxxx1xxx 1390 xxxxx1...-x..xxxxx11xxxx'.--x---1Dxx 1391 xx..<xx..xxxx..xxxxxx..''xx-x-xxx11Dx 1392 xA..xxxx..xxx..xxxxxxx--xxxx-xx.11xxx 1393 x....xxx..xx.HHxxxxxxxx1.xxx-...xxx 1394 x...xxxx...xxH3.xxxxxxxx.1x'''xxx 1395xx..xxxx21.xxxx...xxxx..x..''xxx 1396x...xx.12xxxxdx.xxxxx...x.xxxx 1397x..xx...xx xx*x.xx...xx.xx 1398x......xx xxx....xxxxxxx 1399xx...xxx xxxxxxx 1400 xxxxxx 1401ENDMAP 1402 1403############################################################################### 1404# The ice statue gardens. 1405# 1406# These vaults rely on devious placement of ice or orange crystal statues and 1407# forcing players to face them (if they want loot, that is). 1408# 1409# Foes: Simulacra, ice or orange crystal statue monsters, freezing wraiths, and 1410# white (very) ugly things. 1411# 1412# Loot: Some items from the common loot set, random items, star_item and 1413# superb_item. 1414 1415# Previously called ice_cave_statue_garden_teleport, when it used the old 1416# teleporter lua feature. 1417NAME: ice_cave_statue_garden_transporter 1418TAGS: no_item_gen no_monster_gen no_pool_fixup 1419ORIENT: encompass 1420{{ 1421ice_cave_common_loot(_G) 1422local simul = simulacrum_monsters() 1423mons(simul["savage"]) 1424mons(simul["cruel"]) 1425}} 1426# For easy ice caves, both statues are ice statues, and a freezing wraith has a 1427# 50% chance of replacing one of the two white ugly thing. For hard ice caves, 1428# there is one orange crystal statue with two freezing wraiths, always two 1429# white very ugly things, the first chamber has more cruel simulacra, and there 1430# are two more star_items. 1431: if dgn.persist.ice_cave_hard then 1432MONS: orange crystal statue, freezing wraith, white very ugly thing 1433# 12 * 5 = 60 total weight for savage simulacra, 4 * 5 = 20 total weight for 1434# cruel simulacra, and 10 weight for freezing wraiths. 1435: set_random_mon_list(dgn.random_entry_arg(simul["savage"], "w:12") .. 1436: " / " .. dgn.random_entry_arg(simul["cruel"], "w:5") .. 1437: " / freezing wraith") 1438SUBST: 1 = 112, 3 = 4, D = 3, E = * 1439NSUBST: % = * / % 1440:else 1441MONS: ice statue, freezing wraith, white ugly thing 1442: set_random_mon_list(dgn.random_entry_arg(simul["savage"], "w:16") .. 1443: " / " .. simul["cruel"]) 1444NSUBST: 1 = 2=1 / 4=1112.... / ., 5 = 45 / 5 1445SUBST: D = * 1446:end 1447SUBST: d = def***, g = gh**, i = i* 1448MARKER: P = lua:transp_loc("statue_garden_entry") 1449MARKER: Q = lua:transp_dest_loc("statue_garden_entry") 1450MARKER: R = lua:transp_loc("statue_garden_exit") 1451MARKER: S = lua:transp_dest_loc("statue_garden_exit") 1452: ice_cave_appearance(_G) 1453MAP 1454ccccccccccccccc 1455cR..3EgDiE3..<c 1456c.....*|*.....c 1457ccG....5....Gcc 1458 ccG.......Gcc 1459 ccG..Q..Gcc 1460 xccnnnnnccx 1461 xx...GPG...xx 1462 x...%.S.%...x 1463xx.1..*d*..1.xx 1464x......%......x 1465x..1.G.5.G.1..x 1466x.............x 1467xx.1.......1.xx 1468 x...........x 1469 x.1...A...1.x 1470 xx.........xx 1471 xx...<...xx 1472 xx.....xx 1473 xxxxxxx 1474ENDMAP 1475 1476NAME: ice_cave_statue_garden_chambered 1477TAGS: no_item_gen no_monster_gen no_pool_fixup 1478ORIENT: encompass 1479{{ 1480ice_cave_common_loot(_G) 1481local simul = simulacrum_monsters() 1482mons(simul["savage"]) 1483mons(simul["cruel"]) 1484}} 1485# For easy ice caves, three ice statues in the middle chamber, and a freezing 1486# wraith has a 50% chance of replacing one of the two white ugly thing. For 1487# hard ice caves, there are two orange crystal statues in the middle chamber, 1488# always two white very ugly things total. Two freezing wraiths are added to 1489# the final chamber, and there two more star_items. 1490: if dgn.persist.ice_cave_hard then 1491MONS: orange crystal statue, freezing wraith, white very ugly thing 1492# 12 * 5 = 60 total weight for savage simulacra, 4 * 5 = 20 total weight for 1493# cruel simulacra, and 10 weight for freezing wraiths. 1494: set_random_mon_list(dgn.random_entry_arg(simul["savage"], "w:12") .. 1495: " / " .. dgn.random_entry_arg(simul["cruel"], "w:5") .. 1496: " / freezing wraith") 1497NSUBST: D = 3 / 1 1498SUBST: E = 124, F = 4, 1 = 112, J = * 1499: else 1500MONS: ice statue, freezing wraith, white ugly thing 1501: set_random_mon_list(dgn.random_entry_arg(simul["savage"], "w:16") .. 1502: " / " .. simul["cruel"]) 1503NSUBST: 1 = 2=1 / 4=1112.... / ., D = 2=3 / 1, 5 = 45 / 5 1504: end 1505NSUBST: d = def*** / * 1506SUBST: g = gh||, i = i| 1507: ice_cave_appearance(_G) 1508MAP 1509ccccccccc 1510cg*JiJ*|c 1511c*.....*c 1512c%.....%c 1513c.......c 1514c2..5..2c 1515cc.....cc 1516cccF.Fccc 1517cccc3cccc 1518ccc.E.ccc 1519cc.....cc 1520cD.....Dc 1521c...5...c 1522c.......c 1523cE.....Ec 1524cD.....Dc 1525cccc.cccc 1526xd%...%dx 1527x*E...E*x 1528x%.....%x 1529x.11111.x 1530x..111..x 1531xx.....xx 1532xxx...xxx 1533xxxx.xxxx 1534xxx...xxx 1535xx.....xx 1536x...A...x 1537x.......x 1538x.......x 1539x...<...x 1540x.......x 1541xxxxxxxxx 1542ENDMAP 1543 1544############################################################################### 1545# A jelly themed ice cave 1546# 1547# Foes: Simulacra, ice statue, slime creatures, and a few high level jellies, 1548# especially azure jellies. 1549# 1550# Loot: Guaranteed randart ice-themed weapon, armour, jewellery, or book, along 1551# with some items from the common loot set and star_items. 1552NAME: ice_cave_hellmonk_azure_passage 1553TAGS: no_item_gen no_monster_gen 1554ORIENT: encompass 1555: ice_cave_common_loot(_G) 1556# Loot always includes at least one randart so Jiyva worshipers get something 1557KITEM: j = any weapon randart ego:freezing ident:all / any armour randart \ 1558 / ring of ice randart ident:all / ice dragon scales randart w:5 \ 1559 / ring of protection from cold randart ident:all \ 1560 / any ring randart / any amulet randart \ 1561 / randbook disc:ice numspells:3 1562KMONS: _ = azure jelly 1563KFEAT: _ = altar_jiyva 1564KFEAT: D = slimy_wall 1565SUBST: * = dj *:60, d = defghi, 1 = 1.., 3 = 113334 1566SHUFFLE: qrs 1567# For easy ice cave, use ice statues, 1568# boss slimes, including a rockslime. 1569: if dgn.persist.ice_cave_hard then 1570MONS: ugly thing simulacrum / demonic crawler simulacrum \ 1571 / entropy weaver simulacrum / very ugly thing simulacrum 1572MONS: orange crystal statue, slime creature band, quicksilver ooze 1573MONS: azure jelly, rockslime 1574{{ 1575set_random_mon_list("ugly thing simulacrum w:15" .. 1576 " / demonic crawler simulacrum w:15 / entropy weaver simulacrum w:15" .. 1577 " / very ugly thing simulacrum w:15 / slime creature w:40" .. 1578 " / quicksilver ooze w:20 / azure jelly") 1579}} 1580SUBST: p = 4, q = 455, r = 5, s = 6 1581: else 1582MONS: glowing shapeshifter simulacrum / ugly thing simulacrum \ 1583 / demonic crawler simulacrum / entropy weaver simulacrum 1584MONS: ice statue, slime creature band, quicksilver ooze, azure jelly 1585{{ 1586set_random_mon_list("glowing shapeshifter simulacrum" .. 1587 " / ugly thing simulacrum / demonic crawler simulacrum" .. 1588 " / entropy weaver simulacrum / slime creature w:20 / quicksilver ooze") 1589}} 1590SUBST: q = 34455 1591:end 1592NSUBST: 2 = 2 / 2=2. / . 1593# 50% chance for slimy wall passages, otherwise fill with rock. 1594SHUFFLE: DE / FF 1595SUBST: E = ., F = x 1596: ice_cave_appearance(_G) 1597MAP 1598xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 1599xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 1600xxxxxxxxx..3......xxxxxxxx.....xxxxxxxxx 1601xxxxxxx.......11...pxxxx.......rxxxxxxxx 1602xxxxx1.....xxx.....xxxx.....D....**xxxxx 1603xxxx2....DDDD.....xxx.....D........*xxxx 1604xxxx....EEEE....3.x.......s._.D....jxxxx 1605xxxx31...DDDD.....1.......D........*xxxx 1606xxxxx..1....xxxxxxxxxx......D....**xxxxx 1607xxxxxx...11...xxxxxxxxxx.......qxxxxxxxx 1608xxxxxxxxx3....21....xxxxxx.....xxxxxxxxx 1609xxxxxxxxxx........1......xxxxxxxxxxxxxxx 1610xxxxxxxxxxxxxDEDxxxx.....1.xxxxxxxxxxxxx 1611xxxxxxxxxxxxxDEDxxxxxx.....3.xxxxxxxxxxx 1612xxxxxxx....2....xxxxxxxx....xxxxxxxxxxxx 1613xxxxx..1........xxxxxxx..1.xxx..1..xxxxx 1614xxxx..1...xxx..1..xxx2...DDx.1......xxxx 1615xxxx.....DDxxxx..1......EE....x2..1.xxxx 1616xxxx3...EEE.d*xxx....xxDD...1xx.....xxxx 1617xxxxx.....Dx*d..xxxxxxxx..1.xx...3.xxxxx 1618xxxxxx1....xx.p..2xx...1..xxx.....xxxxxx 1619xxxxxxxxx...xxxx.......xxxx...1xxxxxxxxx 1620xxxxxxxxxx.1..xxxx.p.xxx..1..xxxxxxxxxxx 1621xxxxxxxxxxxx.1..1xxxxx.....xxxxxxxxxxxxx 1622xxxxxxxxxxxxxxx...111...xxxxxxxxxxxxxxxx 1623xxxxxxxxxxxxxxxxxx...xxxxxxxxxxxxxxxxxxx 1624xxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxx 1625xxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxx 1626xxxxxxxxxxxxxxxxxx...xxxxxxxxxxxxxxxxxxx 1627xxxxxxxxxxxxxxxxx..A..xxxxxxxxxxxxxxxxxx 1628xxxxxxxxxxxxxxxxxx.<.xxxxxxxxxxxxxxxxxxx 1629xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 1630ENDMAP 1631