############################################################################## # # The Ossuary, a Tomb en miniature (Zaba) # # # The Ossuary tries to pose an unusual early challenge: many traps and slow # monsters, making the player choose between pressing on towards the loot or # leaving the vault. # # Flavour: Mini versions of Tomb:* and otherwise crypt like. # ############################################################################## {{ function ossuary_portal(e) local timeout_turns = crawl.random_range(1500, 2000) 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, "Nearby sand pours into $F{the}.", "Nearby sand pours into $F{the}, lightly covering it.", "Nearby sand pours into $F{the}, greatly covering it.", "Nearby sand pours into $F{the}, almost completely blocking access.") } e.lua_marker('O', timed_marker { disappear = "The staircase has disappeared completely beneath the sand.", desc = "A sand-covered staircase", entity = 'staircase', dst = "ossuary", dstorigin = "in a tomb", overmap = "sand-covered staircase", turns = timeout_turns, floor = "floor", msg = messager }) e.kfeat("O = enter_portal_vault") e.colour("O = yellow") end -- Use the following line in destination maps after all SUBSTs -- : ossuary_setup_features(_G) -- Note that the function also defines < to be the exit portal. function ossuary_setup_features(e) e.kfeat("< = exit_portal_vault") e.colour("< = yellow") e.lrockcol("white") e.lfloorcol("yellow") e.lrocktile("wall_tomb") e.lfloortile("floor_tomb") end }} # Add the milestone. {{ function ossuary_milestone(e) crawl.mark_milestone("br.enter", "entered an Ossuary.") end }} #### Portal entry vaults. default-depth: D:4-8 NAME: enter_ossuary_1 TAGS: uniq_ossuary no_monster_gen SUBST: . = . ':7 COLOUR: ' = yellow FTILE: ' = floor_tomb SUBST: ' = . : ossuary_portal(_G) MAP ..... .'''. .'O'. .'''. ..... ENDMAP NAME: enter_ossuary_2 TAGS: uniq_ossuary no_monster_gen SHUFFLE: CD / c= COLOUR: ' = yellow COLOUR: C = yellow COLOUR: D = yellow SUBST: D = = SUBST: C = c FTILE: ' = floor_tomb SUBST: ' = . : ossuary_portal(_G) MAP ....... .ccDcc. .c'''c. .C'O'C. .c'''c. .ccCcc. ....... ENDMAP NAME: enter_ossuary_3 TAGS: uniq_ossuary no_monster_gen SUBST: . = Y . COLOUR: Y = yellow FTILE: Y = floor_tomb SUBST: Y = . MONS: rat zombie / jackal zombie / worm zombie MONS: kobold zombie / goblin zombie / hobgoblin zombie MONS: orc zombie / gnoll zombie / human zombie SUBST: . = .:100 11 2 3 : ossuary_portal(_G) MAP ... .O. ... ENDMAP NAME: enter_ossuary_4 TAGS: uniq_ossuary no_monster_gen COLOUR: 1 = yellow, ' = yellow, x = white MONS: rat zombie / quokka zombie / goblin zombie FTILE: 1 = floor_tomb, ' = floor_tomb, x = floor_tomb, O = floor_tomb RTILE: x = wall_tomb : ossuary_portal(_G) MAP ......... .xxxxxxx. .x''O''x. .x'''''x. .x'x'x'x. .x1x'x1x. .xxx'xxx. ....'.... ENDMAP NAME: enter_ossuary_5 TAGS: uniq_ossuary no_monster_gen COLOUR: ' = yellow FTILE: ' = floor_tomb NSUBST: = = 1:= / *:c SUBST: c : cx : ossuary_portal(_G) MAP ... ..c.. ..=c=.. ..=c'c=.. .cc'O'cc. ..=c'c=.. ..=c=.. ..c.. ... ENDMAP #### The portal vaults #################################### # Reset default depth to prevent random generation of portal vaults. default-depth: NAME: ossuary_tomb_1 WEIGHT: 40 ORIENT: encompass TAGS: ossuary no_item_gen no_monster_gen no_rotate SHUFFLE: dwyz SUBST: w=2, y=2 NSUBST: z= 1:1 / *:3 KFEAT: T = alarm trap / floor # loot: 12.5 items ITEM: any scroll w:2 / any scroll q:2 w:3 / \ any potion w:4 / any potion q:2 w:6 MONS: mummy MONS: rat zombie / jackal zombie / snake zombie / goblin zombie / \ hobgoblin zombie / kobold zombie / big kobold zombie / \ human zombie / elf zombie / centaur zombie MONS: kobold zombie / orc zombie / hobgoblin zombie : ossuary_setup_features(_G) : ossuary_milestone(_G) MAP xxxxxxxxxxxxxxxxxxxxxx x.........<A.........x x....................x x...cccccccccccccc...x x...c.22*c...cdddc...x x3..c1cccc...cdddc..3x x..3c........+cccc3..x x3..cccccc.<.....c..3x x..3c.zzzc.......c3..x x3..c.czzc.......c..3x x...c.cccc.......c...x x...c............c...x x...c.ccccTTcccc.c...x x...c.cyycTTcwwc.c...x x...c.yyycTTcwww.c...x x...ccccccTTcccccc...x x....................x x.3.3.3..G..G..3.3.3.x x..3.3..........3.3..x x....................x xxxxxxxxxxxxxxxxxxxxxx ENDMAP NAME: ossuary_the_hunt_dpeg WEIGHT: 10 ORIENT: encompass TAGS: ossuary no_item_gen no_monster_gen # loot: 8 items of which 6 should be good. # Most of the loot helps right here, if need be. ITEM: potion of healing / potion of heal wounds / potion of speed / \ potion of confusion w:5 / potion of mutation w:5 / \ scroll of identify / scroll of teleportation w:5 / \ scroll of blinking w:5 / scroll of holy word / \ scroll of curse armour w:5 / scroll of curse weapon w:5 # There are three setups than can occur: # 10% - part of the loot in the closets, secret doors, bit more loot # 45% - doors are secret, traps are nasty, monsters asleep # 45% - doors are obvious, traps are softer, monsters are awake : if crawl.one_chance_in(10) then SUBST: 3 = d NSUBST: d = 6:3 / *:d SUBST: M = 111. : elseif crawl.coinflip() then SUBST: M = 111. : else SUBST: = = + SUBST: ~ = T SUBST: 3 = 2 NSUBST: M = 1:1 / *:. :end MONS: mummy MONS: generate_awake centaur zombie / generate_awake hobgoblin zombie / \ generate_awake big kobold zombie / nothing w:20 MONS: centaur zombie / hobgoblin zombie / big kobold zombie / nothing w:20 KFEAT: ~ = dart trap w:20 / axe trap w:2 / net trap / needle trap / \ alarm trap / floor w:40 KFEAT: T = alarm trap w:20 / net trap / floor w:70 KFEAT: ^ = net trap w:15 / needle trap w:4 / axe trap w:1 / floor w:20 COLOUR: ^ = red KFEAT: W = dart trap / floor w:20 : ossuary_setup_features(_G) : ossuary_milestone(_G) MAP cccccccccccccccccccc ccccccccc3c3c3c3c3c3c3cddddccc ccc.....WWc=c=c=c=c=c=c=c^.....c cc1.....WW~~~~~~~~~~~~~~~~^.....cc c......WWW~~~~~~~~~~~~~~~~^.....Mcc c1....AW<W~~~~~~~~~~~~~~~~^.....M<c c......WWW~~~~~~~~~~~~~~~~^.....Mcc cc1.....WW~~~~~~~~~~~~~~~~^.....cc ccc.....WWc=c=c=c=c=c=c=c^.....c ccccccccc3c3c3c3c3c3c3cddddccc cccccccccccccccccccc ENDMAP NAME: ossuary_crypta WEIGHT: 20 ORIENT: encompass TAGS: ossuary no_item_gen no_monster_gen no_rotate no_vmirror MONS: mummy MONS: gnoll zombie / hobgoblin zombie / orc zombie / \ human zombie / kobold zombie / goblin zombie / \ big kobold zombie / centaur zombie # mix of strictly good items with strictly useless ones ITEM: scroll of curse armour / scroll of enchant armour w:5 / \ scroll of curse weapon / scroll of remove curse / \ potion of mutation w:5 / potion of cure mutation w:5 / \ potion of confusion / potion of healing w:15 / \ potion of degeneration / potion of restore abilities / \ scroll of immolation / scroll of identify # and sometimes strictly useless ones ITEM: scroll of curse armour / scroll of curse weapon / \ scroll of paper / scroll of random uselessness / \ potion of mutation w:5 / potion of confusion / \ potion of degeneration / scroll of immolation / \ potion of confusion / potion of paralysis # occasionally just use this ITEM: any potion / any scroll w:5 / nothing SHUFFLE: hjkl SUBST: h:d, j:e, k:de, l:.de NSUBST: f = 6:f / *:e NSUBST: d = 2:M / *:d NSUBST: e = 2:M / *:e SUBST: M = 1f, d = dddf, e = eeef NSUBST: . = 6:^ / *:. KFEAT: ^ = alarm trap / floor w:20 SUBST: = : =+ SUBST: = = =+ : ossuary_setup_features(_G) : ossuary_milestone(_G) MAP vvv vvv1vvv ccccc vvfffffvv ccccc clllc vfff1fffv chhhc clllc vvvv^vvvv chhhc cc^cc c^c cc^cc ccc.c ccc+ccc c.ccc c2+.cc cc.....cc cc.+2c ccc..ccc.......ccc..ccc c2+...c.........c...+2c ccc...=....U....=...ccc c2+...c.........c...+2c ccc..ccc.......ccc..ccc c2+.cc cc.....cc cc.+2c ccc.c ccc+ccc c.ccc cc^cc c.c cc^cc ckkkc cc.cc cjjjc ckkkc c.A.c cjjjc ccccc c.<.c ccccc ccccc ENDMAP NAME: ossuary_tomb_2 # Generally have rooms full of either monsters or traps. To protect the # monsters, all doors are secret, no alarm traps, and mostly needle # traps. WEIGHT: 40 ORIENT: encompass TAGS: ossuary no_item_gen no_monster_gen no_rotate KFEAT: ~ = dart trap w:1 / arrow trap w:1 / needle trap KFEAT: ^ = dart trap / arrow trap # Number of 1's is 53, number of ~'s is 57. : if crawl.one_chance_in(10) then SUBST: ~ = 1 SUBST: 1 = 1:20 2:10 ~:50 .:30 : else SHUFFLE: 1~ SUBST: 1 = 1:20 2:10 .:20 SUBST: ~ = ~:20 .:10 :end SUBST: z = 1 NSUBST: B = 1:= / *:c NSUBST: C = 1:= / *:c NSUBST: D = 1:= / *:c NSUBST: E = 1:= / *:c NSUBST: F = 1:= / *:c NSUBST: G = 1:= / *:c NSUBST: H = 1:= / *:c NSUBST: I = 1:= / *:c NSUBST: J = 1:= / *:c NSUBST: K = 1:= / *:c # loot: 12 items ITEM: any scroll w:6 / any potion / any potion q:2 w:2 MONS: snake zombie / hobgoblin zombie / orc zombie / kobold zombie / nothing MONS: big kobold zombie / water moccasin zombie / gnoll zombie / nothing MONS: mummy : ossuary_setup_features(_G) : ossuary_milestone(_G) MAP cccccccccccccccccccccc c<11H~~~G1111F~~~E111c c111H~~~G1111F~~~E111c c111H~~~G1111F~~~E111c cIIIccccccccccccccDDDc c~~~c c~~~c c~~~c c~~~c c~~~c c~~~c c~~~c c~~~c cJJJc cCCCc c111c c111c c111c c111c c111c c111c c111c c111c cKKKc cBBBc c~~~c c^^^c c~~~cccccccccccccc^^^c c~~~c...cddddc...c.z^c c~~~+3<3=d**dn.A.+.^^c c~~~c...cddddc...c.z<c cccccccccccccccccccccc ENDMAP NAME: ossuary_tomb_3 WEIGHT: 40 ORIENT: encompass TAGS: ossuary no_item_gen no_monster_gen no_rotate no_vmirror # zombies should be awake, so they march downwards in a line MONS: generate_awake orc zombie / generate_awake kobold zombie / \ generate_awake hobgoblin zombie / generate_awake gnoll zombie MONS: mummy MONS: orc zombie / kobold zombie / big kobold zombie / hobgoblin zombie # loot: 24 items ITEM: nothing / any scroll w:5 / any potion KFEAT: ^ = alarm trap : ossuary_setup_features(_G) : ossuary_milestone(_G) MAP cccccccccccccccccccccc cccc.....2222.....cccc ccc..2...cccc...2..ccc cc......cc..cc......cc cc.....cc....cc.....cc cc........22........cc ccc..3....22....3..ccc cccc..............cccc cccc+cc........cc+cccc cccc^^cc111111cc^^cccc cccd...cc....cc...dccc ccdd....c....c....ddcc c$ddd...c....c...ddd$c c$ddd...c....c...ddd$c c$$dd...c....c...dd$$c cc$ddd..c....c..ddd$cc cc$$dd.cc....cc.dd$$cc ccc$dd.cc....cc.dd$ccc ccc$ddccc.<A.cccdd$ccc cccccccccccccccccccccc ENDMAP # Guardian mummies are a clue, and actually quite a scary threat. NAME: ossuary_due_mausoleum WEIGHT: 10 ORIENT: encompass TAGS: ossuary no_item_gen no_monster_gen no_rotate no_vmirror MONS: orc skeleton / kobold skeleton / gnoll skeleton / orc skeleton MONS: mummy MONS: patrolling guardian mummy # Loot: 22-30 items, with early loot! ITEM: any scroll / any potion ITEM: any scroll / any potion / nothing KITEM: x = any scroll / any potion KMONS: x = guardian mummy : ossuary_setup_features(_G) : ossuary_milestone(_G) : crawl.mpr("You feel the presence of a powerful and evil guardian...", "warning") MAP ccccccccccccccccccccccccccccc ccccccccccccccccccccccccccccc cc1.1...................1.1cc cc.<.....................<.cc cc1.1....ccccc+ccccc....1.1cc cc......cc.........cc......cc cc.....cc...cc=cc...cc.....cc cc....cc...cmdxdmc...cc....cc cc....c...cmdddddmc...c....cc cc....+...=ddd<ddd=...+....cc cc....c...cmdddddmc...c....cc cc....cc...cmdddmc...cc....cc cc.....cc...cc=cc...cc.....cc cc......cc.........cc......cc cc1.1....ccccc+ccccc....1.1cc cc.<.....................<.cc cc1.1...................1.1cc ccccccccccccc+++ccccccccccccc ccccccccccccc...ccccccccccccc ccccccccccee+.2.+eecccccccccc cccccccccceec111ceecccccccccc ccccccccccccc111ccccccccccccc ccccccccccccc111ccccccccccccc ccccccccccccc...ccccccccccccc ccccccccccccc...ccccccccccccc ccccccccccccc...ccccccccccccc ccccccccccccc...ccccccccccccc ccccccccccccc+++ccccccccccccc cccccccccccc.....cccccccccccc ccccccccccc.......ccccccccccc cccccccc3o...<.A...o3cccccccc ccccccccccc.......ccccccccccc cccccccccccc.....cccccccccccc ccccccccccccc...ccccccccccccc ccccccccccccccocccccccccccccc cccccccccccccc3cccccccccccccc ccccccccccccccccccccccccccccc ENDMAP # INDY: Oh, rats! ... He hates rats. He's scared to death of 'em. NAME: ossuary_due_small_catacomb WEIGHT: 10 ORIENT: encompass TAGS: ossuary no_item_gen no_monster_gen ITEM: any scroll / any potion MONS: kobold skeleton / goblin skeleton / gnoll skeleton / \ orc skeleton # Loot: 10-19 # Guaranteed 10 items and 10 mummies, two in hidden rooms. # 50/50 chance of loot for each of the eleven rats in the rat room. KITEM: x = any scroll / any potion KMONS: x = mummy KFEAT: ^ = dart trap / arrow trap KITEM: y = any scroll w:5 / any potion w:5 / nothing w:10 KMONS: y = rat skeleton : ossuary_setup_features(_G) : ossuary_milestone(_G) MAP ccc cccxccccc ccc....+.^c cccccc cc.1.ccccc.c cc.+^.cc cc..cc cc+cc cc..cc..cc cc.^cc cc...ccccc..cccc.1ccc ccc cc+cc c+.x.+...1.cc cc...cc cAccc...cc cc...cccxccc ccc.cc c..+.^1.+c cc+cc ccc ccc cc+cc c<ccc...cc cc..cc cccccxccc...c ccc cc+cc cc^1=cc cc..+.^..+.x.+ c.cc cc..cc.cc c.1ccccccc...c c^cc cc..cccc.ccc.cc cc+cc c..cccc+cc cc.cc+cc ccc cc1.cc...cccccc=yyyccccc cc.+..x..+...+yyyyy+.^cc cccc...cccxcccyyyccc..cc cc=cc ccc cc+cc cc1.ccccc cxc ccc cc...=xc ccc ccccccc ENDMAP # Menkaures's pyramid NAME: ossuary_due_pyramid WEIGHT: 10 ORIENT: encompass TAGS: ossuary no_item_gen no_monster_gen no_rotate no_vmirror no_hmirror MONS: kobold zombie / gnoll zombie / orc zombie / rat zombie / \ goblin zombie / hobgoblin zombie MONS: kobold skeleton / gnoll skeleton / orc skeleton / rat skeleton / \ goblin skeleton / hobgoblin skeleton MONS: mummy KMONS: 4 = Menkaure, mummy # Loot: 1-16 items ITEM: any scroll / any potion / w:5 nothing KFEAT: ^ = arrow trap / dart trap / alarm trap KFEAT: m = bolt trap KFEAT: ~ = alarm trap NSUBST: ' = 2:m / 25:1 / 25:2 / 30:^ / . : ossuary_setup_features(_G) : ossuary_milestone(_G) MAP cc cccc cccccc cc''''cc cc''cc''cc cc''cccc''cc cc''cccccc''cc cc''cc''''cc''cc cc''cc''cc''cc''cc cc''cc''cc=c''cc''cc cc''cc''cc=ccc''cc''cc cc''cc''cc''''cc''cc''cc cc''cc''cc''cc''cc''cc''cc cc''cc''cc''cccc''cc''cc''cc cc''cc''cc''ccddcc''cc''cc''cc cc''cc''cc''ccddddcc''cc''cc''cc cc''cc''cc''ccd3dd3dcc''cc''cc''cc cc''cc''cc''cc.^d<<d..cc''cc''cc''cc cc''cc''cc''cc.^.4dd3^.^cc''cc''cc''cc cc''cc''cc''cc^..^.dd^.~.~cc''cc''cc''cc cc''cc''cc''cccccccccccccc==cc''cc''cc''cc cc''cc''cc''''''''''''''''''''cc''cc''cc''cc cc''cc''cccccccccccccccccccccccccc''cc''cc''cc cc''c=''''''''''''''''''''''''''''''''cc''cc''cc cc''cccccccccccccccccccccccccccccccccccccc''cc''cc cc''''''''''''''''''''''''''''''''''''''''''''=c<Acc cccccccccccccccccccccccccccccccccccccccccccccccccccccc ENDMAP NAME: ossuary_zaba_two_paths # There is no way up in the end. This is to give the zombies in the beginning # more time to go for a walk and another chance to meet the player. ORIENT: encompass WEIGHT: 10 TAGS: ossuary no_item_gen no_monster_gen no_rotate # # Standard monsters: small zombies, large zombies, boss: MONS: kobold zombie / goblin zombie / orc zombie / hobgoblin zombie MONS: big kobold zombie / gnoll zombie MONS: mummy # KFEAT: F = floor COLOUR: F = cyan KMONS: F = rat simulacrum / goblin simulacrum / kobold simulacrum /\ giant bat simulacrum / nothing w:80 KFEAT: S = floor COLOUR: S = green KMONS: S = spectral rat / spectral goblin / spectral kobold /\ spectral giant bat / nothing w:80 # Loot. ITEM: any potion / any scroll / nothing w:1 # # There are not always traps in corridors but they are guaranteed near the loot: KFEAT: ' = arrow trap w:3 / dart trap w:5 / alarm trap w:7 / floor w:85 KFEAT: " = bolt trap w:1 / net trap w:3 / arrow trap w:5 / dart trap w:10 # : ossuary_setup_features(_G) : ossuary_milestone(_G) MAP ccccccccccccccccccccccccccc c2c2c2cc...........cc2c2c2c c+c+c+c.............c+c+c+c c..........G...G..........c c.........................c c+c=ccccccccc+ccccccccc=c+c bScc'ccG2=.......=2Gcc'ccFv bSScc'ccGc.......cGcc'ccFFv bSSScc'ccc.12321.ccc'ccFFFv bSSSScc'cc.......cc'ccFFFFv bSSSSScc'c.......c'ccFFFFFv bSSSSSS+'c...G...c'+FFFFFFv bSSSSScc'c.......c'ccFFFFFv bSSSScc'cc.""""".cc'ccFFFFv bSSScc'ccc."ddd".ccc'ccFFFv bSScc'ccGc."ddd".cGcc'ccFFv bScc'ccG2=."ddd".=2Gcc'ccFv ccc+ccccccccccccccccccc+ccc c11111cc1c1c1c1c1c1cc11111c c......c+c+c+c+c+c+c......c c.........................c c..........<.A.<..........c ccccccccccccccccccccccccccc ENDMAP # A larger ossuary than usual: there is a corridor with some monsters (and # chances of wights) to get past, and then a little treasure room at the end. # # A hidden door in the treasure room leads to another corridor this one flanked # with a guardian mummy (a hint of what's to come) on one side, and a flying # skull on the other: the flying skull is basically an intelligent alarm trap, # both behind glass. # # At the end of the corridor is a second treasure room, this one also # containing more flying skeleton alarm traps, plus guardian mummies inside # 3x3 rooms with secret doors. # # The intent is that someone with a relatively high stealth skill (at least # for early) will be able to sneak past all of the flying skulls and grab the # loot, and escape out before waking anyone up. Whereas someone with 0 stealth # skill will wake up the mummies immediately. # # XXX: Should be looked at when noise/stealth is redone. # NAME: ossuary_due_cavern WEIGHT: 10 ORIENT: encompass TAGS: ossuary no_item_gen no_monster_gen MONS: centaur zombie w:1 / orc zombie / hobgoblin zombie /\ kobold zombie / snake zombie / orc skeleton / hobgoblin skeleton /\ small snake skeleton / nothing w:5 MONS: wight MONS: flying skull MONS: guardian mummy / mummy w:2 ITEM: any scroll / any potion ITEM: any scroll / any potion / any wand w:4 KMONS: V = guardian mummy KMONS: X = flying skull SHUFFLE: VX SUBST: x = c:20 o:8 SUBST: z = c:20 o:4 SUBST: y = c:20 o:1 SUBST: $ = 1:10 2:1 KFEAT: L = = MARKER: L = lua:message_machine({marker_type="player_at", message="Something \ ancient and evil stirs ahead...", channel="warning" }) : ossuary_setup_features(_G) : ossuary_milestone(_G) MAP ccccccccc cc.......cc cc.........c c...<..A..cc cc.......cc ccc.....cc cc...cc cc.ccc cc.cc cc.cc cc.cc cc.cc cc.cc ccccccccccccccccc cc..ccc c...............c cc...cc c.=cc..xxx..cc=.c ccc...ccc c.c4c..x3x..c4c.c cc......cccccccccccccccccccccccccc.ccc..yzy..ccc.c cc........cc$c$c$c$c$cc.....cccVccc...............c c..........c+c+c+c+c+cc.GdG.cccoccc.cxy..eee..yxx.c c..c.......+..........+..d..L.....+.c3z..eee..z3x.c cc.cc......c+c+c+c+c+cc.GdG.cccoccc.cxy..eee..yxx.c cc.c......cc$c$c$c$c$cc.....cccXccc...............c cc.cc....cccccccccccccccccccccccccc.ccc..yzy..ccc.c cc.....cc c.c4c..x3x..c4c.c cc...cc c.=cc..xxx..cc=.c ccccc c...............c ccccccccccccccccc ENDMAP