Signed-off-by: Eino Keskitalo <evktalo@users.sourceforge.net>
IJHYMJBOPNFORSDVM4RBZ5ZPLGSFSG6JRTPPYOD4YYWPT4YXNRLQC #### V for Volcano!## A combined effort of ideas, execution and tweaking by Jude, dpeg, and Zaba!##### i. Threats## Initial threat is the volcano itself; while there is quite a# delay between explosions, the flame clouds are quite powerful# and cover quite a large area; this could kill an early level# character easily, so beware!## Loot-guard threats are defined in the fiery_guardians function.# Please see the comments there for explanations, and lists of# possible threats.## Extra threats will be listed as MONS: lines.## ii. Loot## All volcanoes have a combination of the following items, though# the amounts of each usually vary. In addition, they also have# whatever armour or weapons have been created for the monsters that# populate the level.## Fire resistance ego armour (any type of armour; this also# includes dragon armour, which is not# given extra rF+)# Flaming ego weapons (a selection of high-damage weapons)# Gold# "Good" potions with fire themes (see setup_loot() for the list)## In addition, some volcanos have extra items taken from:# "Random item"# "Bad items" (see setup_loot() for the list)# "Fruit" (only in volano_6)## See setup_loot() for more information.##### Index:# volcano_grotto - forgotten grotto "temple" volcano; a temple to# the side of a volcano, line 472-523# volcano_lake - lava lake "temple" volcano; a temple suspended# in the middle of a volcano, line 531-591# volcano_pools - many pools "pyramid"; some caves off a central# chamber, but no pyramid?, line 599-658# volcano_tomb - volcano "tomb"; based of Tutankhamun's burial# chamber, has mummies and fire. Line 666-709.# volcano_aerie - "aerie"; two paths to the loot, including lindwurm# island! Line 717-775.# volcano_bunker - "hidden bunker"; "science"-ish portal vault with# golems and a "conservatory". Line 783-823.# volcano_caves - "collapsing caverns", you can choose which one you# want! maybe more than one? Line 830-902.# volcano_village - by zaba! villagerrs are kinda scary, actually!# Line 912-967.###{{-- ####-- # General setup and design functions: (head to line 382 for the maps)function volcano_portal (e)local desc_long = [[Leading directly into the rock is a dark and forbidding tunnel. Every so often air, hot enough to singe your face, blasts from within, and, as though trigger by the air, rocks fall from the roof and sides of the tunnel, slowly filling the entry.]]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,"Rocks fall inside $F{the}.","Debris falls inside $F{the}, filling the entry.","More rocks fall inside $F{the}, blocking the entry.","Rocks have almost completely blocked $F{the}.")}e.lua_marker('O',timed_marker {disappear = "There is a deep roar from within the tunnel. Moments later, a river of lava pours forth, sealing the it permanantly.",desc = "A dark tunnel",desc_long = desc_long,entity = 'tunnel',dst = "volcano",dstname_abbrev = "Volcano",dstorigin = "in a volcano",overmap = "dark tunnel",turns = timeout_turns,floor = "lava",msg = messager })e.kfeat("O = enter_portal_vault")e.kfeat("S = .")e.colour("O = red")e.tags("layout_caves")endfunction volcano_feat_descs()dgn.set_feature_desc_short("gate leading back to the Dungeon","rocky tunnel")dgn.set_feature_desc_short("empty arch of ancient stone","rock-blocked tunnel")enddgn.set_lt_callback("volcano", "volcano_feat_descs")-- Destinations:function volcano_setup (e, metal)setup_loot(e)e.kfeat("< = exit_portal_vault")e.kfeat("I = exit_portal_vault")e.kfeat("^ = known alarm trap")e.subst("L = lll.")e.subst("y = xxx.")e.colour("< = red")e.lrockcol("red")e.lrocktile("wall_pebble_red")if metal == nil thene.colour("c = lightred")e.colour("G = lightred")e.colour("= = lightred")e.lfloorcol("red")e.lfloortile("floor_rough_red")endcrawl.mark_milestone("br.enter", "entered a Volcano.")end-- "Volcano" functions. While the sizes may appear extreme, they are carefully-- weighted and balanced and have been tested extensively.-- Currently unused--function place_giant_volcano(e)-- e.kfeat("V = l")-- e.lua_marker('V', fog_machine { cloud_type = "flame", walk_dist=0, pow_min=10,-- pow_max=10, delay=1100, size=90000,-- spread_rate=100 })--endlocal large_warning = tw_machine(3, "The air gets thick with the scent of sulphur.","In the distance, the volcano erupts with a roar.","The volcano comes to life with a roar!")local small_warning = tw_machine(3, nil, nil, nil, "The volcano roars to life, " .."belching forth lava!", "The air gets thick with " .."the scent of sulphur.")function place_large_volcano(e)e.kfeat("V = l")e.lua_marker('V', fog_machine { cloud_type = "flame", walk_dist=15, pow_max=6,delay = 300, size = 10000, spread_rate = 30,helper = large_warning})endfunction place_medium_volcano(e)e.kfeat("V = l")e.lua_marker('V', fog_machine { cloud_type = "flame", walk_dist=15, pow_max=6,delay = 300, size = 3000, spread_rate = 30,helper = small_warning})endfunction place_small_volcano(e)e.kfeat("V = l")e.lua_marker('V', fog_machine { cloud_type = "flame", walk_dist=15, pow_max=6,delay = 300, size = 800, spread_rate = 30,helper = small_warning})endfunction place_tiny_volcano(e)e.kfeat("V = l")e.lua_marker('V', fog_machine { cloud_type = "flame", walk_dist=10, pow_max=6,delay = 800, size = 80, spread_rate = 10,helper = large_warning})endfunction place_medium_flame_cloud (e, glyph, nolava)if not nolava thene.kfeat(glyph .. " = l")ende.lua_marker(glyph, fog_machine { size = 3, pow_min = 7, pow_max = 7, delay = 80,start_clouds = 1, cloud_type = "flame"})end-- #-- ###-- ###-- # Loot functions:function make_fiery_armour (e, armour)local armour_string = ""for _, at in ipairs(armour) doarmour_string = armour_string .. " / " .. at .. " ego:fire_resistance good_item"endreturn string.gsub(armour_string, "\s*\/$", "")endfunction make_fiery_weapon (e, weapon)local weapon_string = ""for _, wt in ipairs(weapon) doweapon_string = weapon_string .. " / " .. wt .. " ego:flaming good_item"endlocal n_weapon = string.gsub(weapon_string, "\s*\/$", "")e.item(n_weapon)endfunction setup_loot (e)e.item(make_fiery_armour(e, {"robe w:30", "animal skin w:30", "leather armour w:30","ring mail w:30", "scale mail w:20", "chain mail w:20","banded mail w:20", "plate mail w:10", "pair of gloves w:5","helmet w:6", "pair of boots w:3", "cap w:2", "wizard hat w:2","shield w:1", "buckler w:3"}) .." / dragon armour w:5")e.item([[potion of berserk rage w:20 / potion of poison w:2 / potion of might w:5 / potion of brilliance w:5 /potion of agility w:5 / potion of experience w:1 / potion of resistance]])e.item(make_fiery_weapon(e, {"demon whip w:2", "dire flail w:4", "ankus w:20", "dagger w:20","sabre w:20", "scimitar w:20", "katana w:1", "demon blade w:1","triple sword w:1", "broad axe w:20", "battleaxe w:10","executioner's axe w:1", "spear w:20", "trident w:20", "demon " .."trident w:1", "glaive w:1", "halberd w:10", "lajatang w:10","longbow w:5", "crossbow w:5"}))e.item("any")e.item([[potion of decay / potion of degeneration / potion of mutation /scroll of immolation / scroll of curse weapon / scroll of curse armour /potion of confusion / potion of paralysis / scroll of paper /scroll of random uselessness]])end-- #-- ###-- ###-- # Monster functions:function make_fiery_mons (e, monster, weapons, armours)-- Converts a "normal" monster to a fire-themed one through ego weapons and armour.-- syntax: make_fiery_mons(_G, "monster", {"weapon chance 1", "weapon chance 2"}, {"armour chance 1", "armour chance 2"}) etc.local monstring = "" .. monsterif weapons ~= False thenmonstring = monstring .. " ; "for _, weapon in ipairs(weapons) domonstring = monstring .. weapon .. " ego:flaming |"endendif armours ~= False thenmonstring = monstring .. " . "for _, armour in ipairs(armours) domonstring = monstring .. armour .. " ego:fire_resistance |"endendreturn string.gsub(monstring, "\s*\|$", "")end-- This function sets up two slots of monsters: in general, the first-- slot (say, 1) is the "surrounding" guardians, while the third slot-- is a "levelled" up version of the 1s. It's currently balanced for-- two or three 1s, and one 2.---- Packs are basically as follows:-- ("intelligent" packs; packs involving uniques)-- orc, orc, orc, Urug; orc, orc, orc, Blork the orc; orc, orc, orc,-- orc warrior.-- human, human, human, Edmund; human, human, human, Michael; human,-- human, human, human.-- kobold, kobold, kobold, Sonja; kobold, kobold, kobold, big kobold.-- goblin, goblin, goblin, Ijyb; goblin, goblin, goblin, hobgoblin.-- gnoll, gnoll, gnoll, Grum + war dogs; gnoll, gnoll, gnoll, gnoll.-- (in "Tomb") mummy, mummy, mummy, Menkaure; mummy, mummy, mummy,-- guardian mummy.-- (no-unique packs, but still "intelligent")-- deep elf soldier, deep elf soldier, deep elf soldier, deep elf-- fighter;-- nothing, minotuar (all on its lonesome)---- Natural "packs" usually consist of a few fire/red-themed monsters-- surrounding either a lindwurm, firedrake, or manticore.---- Demonic "packs" usually consist high chance of imps, toenail golems-- and pulsating lumps, lower chance of red devils, hell hounds and ghouls-- which are then surrounding either a hell hog, a hell knight (with-- watered-down equipment), flayed ghost or flaming corpse.---- Mixed demonic/natural packs consist of mixes of the above.---- Non-living packs consist of fire vortices and elementals, and are usually-- mixed in with the above demonic packs.local urug = "Urug ; spear ego:flaming race:orcish . leather armour ego:fire_resistance race:orcish"local blork = "Blork the orc ; short sword race:orcish ego:flaming . leather armour ego:fire_resistance race:orcish"local edmund = "Edmund ; flail ego:flaming . leather armour ego:fire_resistance"local michael = "Michael ; dagger ego:flaming . robe ego:fire_resistance"local sonja = "Sonja" -- We don't touch her equips.local ijyb = "Ijyb ; club ego:flaming | dagger ego:flaming . ring mail ego:fire_resistance race:orcish"local grum = "Grum ; animal skin ego:fire_resistance"local menkaure = "Menkaure" -- Or hislocal hellknight = "hell knight w:1 ; hand axe ego:flaming . ring mail ego:fire_resistance"function fiery_humans (e)local human = "human ; short sword ego:flaming | long sword ego:flaming . ring mail ego:fire_resistance"e.mons("hog / " .. human)e.mons(human)endfunction fiery_guardians (e, tomb)local found_guard = falselocal guard_type = ""local main_guard = ""if crawl.one_chance_in(9) then-- We decided to use a unique.local unq_weight = crawl.random2(50)found_guard = true;if unq_weight < 10 thenguard_type = "orc warrior"main_guard = urug .. " / " .. blork .. " / orc warrior ; trident race:orcish ego:flaming . ring mail ego:fire_resistance"elseif unq_weight < 20 thenguard_type = "human"main_guard = edmund .. " / " .. michael .. " / human ; falchion ego:flaming . leather armour ego:fire_resistance"elseif unq_weight < 30 thenguard_type = "big kobold"main_guard = sonja .. " / big kobold ; long sword ego:flaming . ring mail ego:fire_resistance"elseif unq_weight <= 50 thenguard_type = "gnoll"main_guard = grum .. " / gnoll ; halberd ego:flaming"endendif tomb thenguard_type = "mummy"main_guard = menkaure .. " / guardian mummy"found_guard = trueend-- If we've reached this stage, we've maybe already found a guardian.if found_guard thene.mons(guard_type)e.mons(main_guard)returnend-- If not, we still have to decide what we're going to use.if crawl.one_chance_in(10) then-- It's a lone minotaur! labyrinth-esque.e.mons("nothing")e.mons("minotaur ; trident ego:flaming . ring mail ego:fire_resistance")returnendif crawl.one_chance_in(4) then-- We're still going to use a pack of "intelligents".local pack_weight = crawl.random2(30)-- "Plain" flavour packs are orcs+orc warrior (maybe an orc knight)-- kobolds + big kobold (maybe a kobold demonologist), or deep elf-- soldiers + deep elf fighter.if pack_weight < 10 thene.mons("orc warrior")e.mons("orc warrior / orc knight w:1")elseif pack_weight < 20 thene.mons("big kobold")e.mons("big kobold / kobold demonologist w:2")elseif pack_weight <= 30 thene.mons("deep elf fighter" )e.mons("deep elf fighter / deep elf knight w:3")endreturnend-- We are now going to use a mixed pack.if crawl.one_chance_in(3) then-- "Lair"-esque fire-themed monster pack.e.mons("hog / giant ant / redback w:1 / bumblebee w:1 / manticore")e.mons("firedrake / lindwurm w:1")returnendif crawl.one_chance_in(3) then-- "Demonic" fire-themed monster pack.e.mons("imp w:20 / pulsating lump / toenail golem / hell hound w:9 / \ghoul w:9 / red devil ; trident ego:flaming")e.mons("efreet / flaming corpse / flayed ghost / hell-hog / vampire / " .. hellknight)returnendif crawl.coinflip() then-- Demonic/unliving themed pack.e.mons("imp / fire elemental / toenail golem / pulsating lump / hell hound / fire vortex")e.mons("efreet / vampire / " .. hellknight)returnend-- Finally, if we reach this stage, let's go all out.e.mons("hell hound / hog / toenail golem / fire elemental / imp")e.mons(hellknight)returnend}}default-depth: Lair:5-8, Orc:2-4, Hive:1################################################################################ Entries:NAME: enter_volcano_1TAGS: uniq_volcanoORIENT: floatCOLOUR: X = redCOLOUR: S = red: volcano_portal(_G)MAPxxxXX..XXS..@XOSS...XXSS...xXXx.xxxxxxxxENDMAPNAME: enter_volcano_2TAGS: uniq_volcanoORIENT: floatCOLOUR: X = redCOLOUR: S = red: volcano_portal(_G)MAPxxxxxxXXXxxXOXxxSSSxxx.Sxxx.S.xxxx.@.xENDMAPNAME: enter_volcano_3TAGS: uniq_volcanoORIENT: floatMONS: patrolling firedrake# His name is Robby.COLOUR: X = redCOLOUR: S = red: volcano_portal(_G)MAPxxxxxxxXXXxxxXXOXXxxxSSSxxxx.1xxxx...xx..xxx.xx....@xxxxx.ENDMAP# This is the "large" one. You might get a clear path, but then again...NAME: enter_volcano_4TAGS: uniq_volcanoORIENT: floatCOLOUR: X = redCOLOUR: S = redNSUBST: L = 4:. / *:l: volcano_portal(_G)MAPxxxxxxXXXxxXOXxxxSSSxxxxxSxxxxxx.xxxxx.xxxLxxxxLlLxxxxLlllLxxxLlllllLxxxLlllLxxxxLlLxxx.@.xENDMAP###############################################################################default-depth:################################################################################ "Forgotten grotto Temple"## In the bowels of a volcano, some renegade priests of# makhleb/trog/vehumet have built a temple, which has# since been forgotten... the temple guardians still remain# and are ready to fight to the death.NAME: volcano_grottoWEIGHT: 60ORIENT: encompassTAGS: volcano no_item_gen no_monster_genKFEAT: _ = altar_makhleb / altar_trog / altar_vehumetKMONS: l = lava snake w:2 / lava fish w:5 / nothing w:120KFEAT: l = l# Sets up the temple guardians.: fiery_guardians(_G)MONS: clay golem w:50 / molten gargoyle w:2# Loot: 9 items, 8 gold.: volcano_setup(_G): place_large_volcano(_G)MAPxxxxxxxxxxyyxxxxxxxxy......yyyxxxxxxyyy.LLLLL....yxxxxxxyyy...LlllllL.....Gxxxxxxxxxxxyy....LLlllllllL...........yxxxxxxyy....LLlllllllllL....Gxxxyy..yyxxxxyy.....LllllllllllllL..yxx xxy.y..yxxxxy......LlllllllllllllL..yxxx xxyxx.yyxxxy......LlllllllllllllllL..yyxx xxy..yxxxxy.....LllllllllllllllllllL..yyxxxxxy.xxxxy.....LllllllllllllllllllllL....yx xxy.xxxxy....LllllllllllVlllllllllllL...yxx xxy.xxy....LlllllllllllllllllllllLL...yxx xx.xxxy....LlllllllllllllllllllL....yxx xx.xxxy.....LlllllllllllllllllLL...yxx xx.xxy.y...LllllllllllllllllLL...yxx x.yxxxyxy...LllllllllllllllL...yyxx xx+xxxxxxy...LllllllllllllL...yxxx xx...xxxxy...LL....LlllllL..yxx cccccx.....xcccccxxy....xxx..LlllL...yx ccd$ecc..<..ccd$fccxy.yxxx<xxy.LLL...yxx c.$f$.c.....c.$e$.cxx.xx....xxx.....yxx c.g$g.ccc+ccc.g$g.cx.xxx.....xxy....yx c..3..c.....c..3..cxx..xxxAxx.xxy..yxx cc...c=.111.=c...ccxxx..xxx.xxxx..xx cccccc.G_G.ccccccxxx.x.xx xxxx cc.2.ccx...x cccccxxxxxENDMAP############################################################################################################################################################### "Lava lake Temple"## Somehow, some priests have constructed a temple right over the lava! Who kows# what magic spells keep this structure afloat, and its occupants from roasting# to death!NAME: volcano_lakeWEIGHT: 60ORIENT: encompassTAGS: volcano no_item_gen no_monster_gen no_rotateKFEAT: _ = altar_makhleb / altar_trog / altar_vehumetKMONS: l = lava snake w:2 / lava fish w:5 / nothing w:900KFEAT: l = l# Let's choose a path from m, u, z, i, r, ySHUFFLE: m/u/z/i/r/nSUBST: m = .SUBST: u = l, z = l, i = l, r = l, n = l# Sets up the temple guardians.: fiery_guardians(_G)MONS: clay golem w:50 / molten gargoyle w:2# Loot: 10 items, 6 gold.: volcano_setup(_G): place_medium_volcano(_G)MAPxxxx xxxxx xxxxx xxxxxxxxxyyxxx xxyyxxxxyyyxxxyyyyxxxxxx xxx....xxxxx....xx.....xxx...xxxxxxxyyxxxxyyy.yyyyyyyy.y....yyy...yyyy...yyxxxxxx..yyy.................................yxxxxxyyy.......................................yxxxxxxyyy...........................................yxxxxxxxy...............LLLllLLllLLLllllLLllLLlllL........yxxxxxy..............LllllllllllllllllllllllllllllllLL........yxxxxxxy............LlllllllllllllllllllllllliiilllllliL........yxxxxxy............LLllllllllVlllllllllllllliillliilliilllLLL......<xxy............LmmllllllllllllllllllllliillllllViilllllll.......yxxxxxy........LllllmmllllllllllllllllliillllllllllllllllllL.......yxxxy...........Llllllmmllllllllllllllilllllllllllllllllllll.....yxxxxxy.........LllllllllmmllLlLLllLLlillLLLllLllllllllllllLL......yxxxy.....LlllllllllllllmL..................LlllllllllllllL.....yxxxxxy......Lllllllllllllll.ccccccccccccccccc.lllllllllllllllL.......yxxy.......LlllllVllllllL.c....+.111.+....c.LllllllllllllllL......yxxxxy.....Lrrllllllllllll.c.<1.c.G_G.c.1<.c.llllllllllllllLL.......yxxy......LllrrlllllllllL.c....c..2..c....c.Lllllllllllluuu.......yxxxxy.....Lllllrrllllllll.ccc==ccc+ccc==ccc.LllllllllluullL......yxxxy.....LlllllllrllllllL.c......c.c......c.lllllllluullllL.....yxxxxy.....Llllllllrllllll.cccccc.c.c.cccccc.LllllluulllllllL.....yxxxy......LllllllllrrlllL.c.$f$c.c.c.cgd$.c.lllluullVllllllL......yxxxxy......LlllllVllrllll.c.$gec.c.c.c$e$.c.LluulllllllllllL......yxxxxy.......LllllllllrllL.c.3dgc.c.c.cfg3.c.uullllllllllllL.....yxxxxy........LlllllllllrlL.c......c.c......c.LllllllllllllL......yxxxxy.....Lllllllllllllrr.cccccccc+cccccccc.llllllllllllllL......yxxxy.....LlllllllnnnllnnL.................LLllllllllllllL.....yxxxxxxy....LllllnnlllnnlllLllLlLllllLllLlLlzlllllllllllllL.......yxxxA.......nnnllllllllllLlllllllllllllllllzzllllllllllllL.......yxxxxxxy.....LllllllVllllllllllllllllllllllllzzlllVlllllllL.....yxxxy........LLllllllllllllllllllllllllllllllzzllllllllL.....yxxxxxy..........LllllllllllllllllllLllllllllllzlllllLL......yxxxxxy.........LLlllllllllllllLL...LLllllllllzzzL......yxxxxxxxy.........LLlLLlLllllLL.......LLllLlLlLL.......yxxxxxxxxxxy...................yy.................yxxxxxxxy..............yxxxxxy.............yxxxxxxyyy.yy.yy.yyyxx xxy..........yxxxxxxxxxxxxxxxxxx xxyyyy.yyy.yxxxxxxxxxxxxxxxENDMAP############################################################################################################################################################### "Many pools Pyramid"## There's no pyramid as such, but it was originally supposed to be a pyramid!# Instead, we have randomly placed loot in little rooms off the central chamber.# Nice place to take a holiday, wouldn't want to leave here...NAME: volcano_poolsWEIGHT: 60ORIENT: encompassTAGS: volcano no_item_gen no_monster_gen# Sets up the temple guardians.: fiery_guardians(_G)MONS: clay golem w:50 / molten gargoyle w:2# Loot: 10 items, 6 gold; done in volano_setup.SHUFFLE: T/Q/B/Y/R# Do the loot first, 10 objects: two monsters (1, 2)NSUBST: T = 1:1 / 1:2 / 1:d / 1:e / 2:$ / 2:f / 2:gNSUBST: Q = 1:1 / 1:1 / 2:d / 2:e / 2:$ / 1:f / 1:g# Now the entrance:NSUBST: B = 1:A / *:.# Loot + 10 trashy items.SUBST: R = hNSUBST: Y = 2:1 / *:.# And the exitSHUFFLE: <<<NSUBST: < = 4:.: volcano_setup(_G): place_tiny_volcano(_G): place_medium_flame_cloud(_G, 'J')MAPxxxxxyxxxxyTyxx xxxxxTTTTyxxxxxxxxxxlLTTTy.xx...yxx xxxxxlllTT<.y..yxx.xxx xxyxxxxllllL.Lxxxxxy.x.xx xxxxxxxxxxyQyxxxxJlllllxx xxy..yxx xxy...xyQyQQ.LLxxxxxxllxx xxxy..xx xxxy..yxx.QQQQ.LllLxxxxxx xxyy.x xxxy..yxxxxlL.Q<Llllllxxxyy.x xxxy..yxxxxxlllLlLllllllJxxxx..xxxxx xxy..yxxxx xxlllllllllllxxxx.yxxxxyxxxxxxxxy.yxxxxx xxlllllllxxxxx...xy..xxy..yxx.yx xxxJllxxxxx.............y.xxx xxxxxxxy...LlLlLlL....xyxx xxxxxy...LllllllllL....yx xJxxy...LllllllllllL....x xxllxxy...LlllllVllllL....xx xxlllxxxy...LlllllllllllL....x xxlLLllxxxx....LlllllllllL....yxxxx xxlLRRLlxxxxxy.xy....LllLlLlL.......xyxx xxy<RRRRyxxxy...yxxyy..............yxx..yxxxxy.RRRRyxxxxxy.xxxxxxxxyyxxxyyxy.yyyxxxxxx..xy..yy..yxxxxxxx..yx xxxx xxxxxx.xxxxxx xxy..yxxxxxxxxxyxy.Lyxxxxx xx.y<y.yx xxyxxxxy.yy.LllllJx xxyyYYYyyx xxxxy<BBB.Lllllx xxyYYYYYyxxxLBBBBLlllllx xxllLYYlLLxxxLBBBLllllxx xxllLlllxxxlllLLlllxx xxllllxxxlllllllxx xxxllxxxllllxxx xJxxxxxJlxx xxxxxxxENDMAP############################################################################################################################################################### "Volcano tomb"## Some forgotten emperor was burried here! His tomb is guarded by mummies, flying# skulls and clouds of flame. Perhaps there is loot!NAME: volcano_tombWEIGHT: 30ORIENT: encompassTAGS: volcano no_item_gen no_monster_gen no_rotate# Sets up the temple guardians, 1s and 2s.# The flying skulls on lava.KFEAT: u = lavaKMONS: u = flying skull# We have a specific monster set for this vault.: fiery_guardians(_G, true)MONS: firedrake skeleton w:5 / lindwurm skeleton w:1 / hog skeleton / hound skeletonMONS: mummy# Loot: 4 gold, 8 items.SHUFFLE: 12K: volcano_setup(_G): place_large_volcano(_G): place_medium_flame_cloud(_G, "J"): place_medium_flame_cloud(_G, "K")MAPxxxxxxxxxxyyxxxxxxxxy..yy.....yxxxxxxy........yyx...yxxx xxxxxxxy.................yxxx xxxxyyxxxxxy.........LLLL........yxxx xxy.y..Lxxxxy.........LLllllLL........yxxx cccccccxy.y.3Lllxxxy..<..A...LllllllllLLL.......yxxx c..Y..cy.xxxLlllxxxy.........LlllllllllllllLLL.....yxc ccc.....=.xx xxllJxxxy........LLlllllllllllllllllLLL...lcccccccccGc..3..ccc xxxxxxxy....LLlLlllllllllllllllllllllllL........+....+.3<3.+Kcxy....LlllllllllllllllllllllllllL....lcccccccccGc..3..cccxLl.LllllllllllllllllllllllllllllL..yxc ccc.....cxlllllllllllllllllGlllllllllllllllLLxx c1c..Y..cxxlllllllllllllGlllllGlllllllllllllxx cc+ccccc=cc ccccccxxlllllllllllllllllllllllllllllllxx ccc.........ccc$defcxxullllllllGllllVllllGlllllllluxx c2+.lllllll.+4=ge$fcxxxlllllllllllllllllllllllllxxx ccc.........ccc$defcxxllllllllGlllllGlllllllxxx cc+ccccc+cc ccccccxxllllllllllGlllllllllxxx c1c cKcxxllllllllllllllllllxxx ccc cccxxxllllllllllllllxxxxxxlxxlxxxxlxxxxxxxxxx xxxENDMAP############################################################################################################################################################### Lava "aerie".## It doesn't look much like an aerie these days, but it still has some of# the "aerie"-ish effects: flame clouds, flame elementals, lava and vortices!NAME: volcano_aerieWEIGHT: 30ORIENT: encompassMONS: lindwurmMONS: toenail golem / molten gargoyleMONS: fire elemental / fire vortexNSUBST: R = 1:1 / 1:L / 1:l / 1:.NSUBST: Y = 8:3 / 6:J / *:.SUBST: X = lxKPROP: l = no_cloud_genCOLOUR: m = redTAGS: volcano no_item_gen no_monster_gen: volcano_setup(_G): place_small_volcano(_G): place_medium_flame_cloud(_G, "J", true): place_medium_flame_cloud(_G, "K")# Sides: Lindwurm # Vortex/elementalMAPxxxxxxxxxxxKlllllKxxxxllLLLLLllxxxxXl.d$$ef.lXxxxxy...$f<g$...yxxxxy..g$de$..yxxxxy..yyy..yxxxxx+mxm+xxxxxxy.xxllLYyxxxxy.yxXlllLYyxxxxy.2yxXllllLYyxxxy2yxXlllLYyxxxxy.xxllLYyxxxxy.xxLYyxxxxy.xYyxxxxxx+x+xxxxxxxy..xxxYYyxxxxxxy..LlXxXlLYYyxxxxxy..LlllXxXlllLYYyxxxy.LlllRRXxXlVlllLYyxxy.LlllRRXxXlllllLYyxxxy..LlllXxXlllLYYyxxxxxy..LLXxXlLYYyxxxxxxy..xxxYYyxxxxxxxx+x+xxxxxxy.xYyxxxxy.xxlYyxxxxy.xxllLYyxxxxy.yxXlllLYyxxxxy.2yxXKlllLYyxxxy2yxXlllLYyxxxxy.xxllLYyxxxxx+mxm+xxxxxy..yyy..yxxxxy.........yxxxxy...<...A...yxxxxy...LLL...yxxxxllLlllLllxxxxKlllllKxxxxxxxxxxxENDMAP############################################################################################################################################################### Hidden bunker!## There are scientists about, beware, as they may wish to experiment on you! The# idea was by Zaba, and the execution by due!NAME: volcano_bunkerWEIGHT: 30ORIENT: encompassTAGS: volcano no_item_gen no_monster_gen no_rotate# Loot: 11 items, 8 gold.: volcano_setup(_G, true)ITEM: apple / chokoCOLOUR: m = blueCOLOUR: = = cyanCOLOUR: + = cyanMONS: dragonMONS: human ; robe ego:fire_resistanceMONS: toenail golem: place_medium_volcano(_G): dgn.set_feature_desc_short("translucent rock wall",: "glass window"): dgn.set_feature_desc_long("translucent rock wall",: "A pockmarked, ultra-hard glass window.")KFEAT: K = .MARKER: K = lua:fog_machine ( { cloud_type = "rain", walk_dist=3, pow_max=2, \delay=300, size=3 } )MAPxxxx vvvvvvvvvvvvvxxxxllxxx xxx v...........vxxxlllllllxxxlxxx v.vvvvvvvvv.vxxlllVlllllllllllxxxx v.v33$e$$fv.vxxlllllllllllllllllxxx v.v$$$gddgv.vxxllllllllllllllllllllxx v.+ggdf$$ev.vxxllllllllvmvmvmvmvmvvvvvvvvvvvvvvvvvv.vxxllllllllm.....vKiii...2...v...=......vxxlllllllv.232.viWtWW......+.<.vvvvvvvvxxllllllm.....vllttW..2...v...vxxxxxxllllvvv+vvvvvvvvvvvvvvvv+vv.yxxxxlllm.....v.v..2v2.....v..m..yxxxxllllv.<.A.+.v+vvvvv+v+vvv.=..Lyxxxxxlllllm.....v...............mLLllllxxxxlllllvmvmvmvmvmvmvmvmvmvmvmvlllllxxxxxllVlllllllllllllllllllllllllllllllllxxxxxlllllllllllllllllllllllllllllVlllxxxxllllllllllllllllxxllxxxllllllllxxxxxxlllllVllllllxxxxxx xxxlllllxxxxxllllllllxxx xxxllxxxxxlllllxx xxxxxxxxxxxxENDMAP############################################################################################################################################################### Collapsing caverns! These don't actually have flame clouds. Wow!# idea by dpeg, execution by due. One entrance will close when you enter the# portal, leaving you with 7 to discover. Quickly, now!NAME: volcano_cavesWEIGHT: 30ORIENT: encompassTAGS: volcano no_item_gen no_monster_gen no_rotateLFLAGS: no_tele_control: volcano_setup(_G, true){{local mytable = { total_doorways=8, total_collapsed=0, ac = {} }local function collapse_doorways (marker, mytable)local x, y = marker:pos()local you_x, you_y = you.pos()if mytable.total_collapsed == mytable.total_doorways thenreturnendif you_x == x and you_y == y thencrawl.mpr("There is a rumble as the volcano erupts. The roof shakes.","warning")returnendlocal ack = x .. "/" .. yif mytable.ac[ack] ~= true thenmytable.ac[ack] = trueif you.see_cell(marker:pos()) thencrawl.mpr("The volcano erupts! Nearby, a roof collapses.", "warning")elsecrawl.mpr("There is a rumble as the volcano erupts. The roof shakes.","warning")endmytable.total_collapsed = mytable.total_collapsed + 1dgn.terrain_changed(x, y, "stone_wall", false, false, false)dgn.colour_at(x, y, "lightred")endendlocal collapse_marker = function_machine ( {marker_type = "random", turns_min=30,turns_max=40, func=collapse_doorways, marker_params=mytable } )}}# FIX: Smushing these together does nothing. Enne is working on it!KPROP: R = no_rtele_intoKPROP: X = no_rtele_intoKPROP: Z = no_rtele_intoKPROP: 1 = no_rtele_intoKPROP: 2 = no_rtele_intoKPROP: < = no_rtele_intoSUBST: X = .SUBST: Z = c.SUBST: Y = c.SUBST: R = defg$: fiery_guardians(_G): lua_marker("M", collapse_marker): volcano_setup(_G)# There are eight oportunities for loot! Seven single threat (1) plus two items,# and one triple threat (121), plus six items. items can be any of: 1 armour,# 1 weapon, 1 potion, 1 any, 1 gold)MAPccc cccccccXcc cccZZZcccccc cccc ccXZ<cc cccc ccXXRXX<ccccZXccc ccXZccc cXXRR1c cccZZccc ccXR1Zcccc<XRRYcccXR<ZXc ccXXccc cccX1RRX<cc cccXcc cccccccX1XXZccXR1ccc ccMcc ccXXXXXXXcc ccMc cccZccccccccccMccXcccccXXXccc.YYcccXXccccXZZcccccc ccc.cccc cccZXXXZccccccY..Yc.cYccc.cccMcccY.Y...YccMcYYccccc.cc.cccYY.YYYccccZXXXXXXXZcccccY...c.....Y.....cYY....cc.Y.......Y.YYY..Y..Y......Y..cXXXX1RRXXXZZcccAcccccYY..Y...Y.....YcccMcccY...Y...Y....Yc.cYY....ccMXXXX2RRXXXXZcccc cccYccc.ccccY.cccZXXXZccc.cccY....YcccMcccY..YcccZXXX1RRXXXZccccc ccc cccccZXXRRXXX<ccc ccc..cccZXXRXccc<cc ccZXXXXXXZccccccZXX1XZccc cccc ccZXR1XXccc cccZXXZccccccZZccc cccZcc<c cc<ccccccc cccccc cccENDMAP############################################################################################################################################################### Zaba's village!## These stupid humans have built their village right next to a dormant volcano.# It has erupted! Most have fleed, but some have stayed behind to guard their# hard-earned loot. Idea kinda by dpeg, execution by Zaba.NAME: volcano_villageWEIGHT: 30ORIENT: encompassTAGS: volcano no_item_gen no_monster_gen no_rotateSUBST: S = lwSUBST: W = wW.SUBST: L = ll.SUBST: R = lxKFEAT: # = open_seaSHUFFLE: MINSUBST: I = $defNSUBST: M = 4:1 / 1:2 / *:.NSUBST: N = 6:1 / *:.SUBST: " = ..'KFEAT: ' = alarm trap: fiery_humans(_G): volcano_setup(_G): place_medium_volcano(_G)MAP################################################################################################################################################################################################################################################################################################################################################################################################################################################################################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww################wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww################wwwwwwwwWwWwWwWwWwWwWwWwWwWwWwWwWwwwwwwww################wwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwww################wwwwwwx...."""....."""....."""....xxwwwww################wwwxxxx...xx+xx...xxxxx...xx+xx...'xxwwww################wwxx.xx..xxMMMxx.xxIIIxx.xxNNNxx..x.xxxww################SSx.x.x..xMMMMMx.xIIIIIx.xNNNNNx..x.xAxSS###############xSSx<x.x..xMMMMMx.xIIIIIx.xNNNNNx..x.x<xSSx##############xlRxxx.x..xxMMMxx.xxIIIxx.xxNNNxx..xx.xxRlx##############xRlllxx....xxxxx...xx+xx...xxxxx...xxxxllRx##############xlRlllxx...."""....."""....."""....xllllRlx##############xRllllllLLLLLLLLLLLLLLLLLLLLLLLLLLLllllllRx#######xlRllllllLlLlLlLlLlLlLlLlLlLlLlLlLllllllRlxxRlllVllllllllllllllllllllllllllllllVllllRxxlRlllllllllllVllllllVllllllllVlllllllllRlxxRlRlllllllllllllllllllllllllllllllllllRlRxxRlllRlllRlllRlllRlllRlllRlllRlllRlllRlllRxxlRlRlRlRlRlRlRlRlRlRlRlRlRlRlRlRlRlRlRlRlxxRlRlRlRlRlRlRlRlRlRlRlRlRlRlRlRlRlRlRlRlRxxRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxENDMAP###############################################################################